var a = +[]
别用控制台,能说出来是多少?
成都创新互联是网站建设专家,致力于互联网品牌建设与网络营销,专业领域包括网站设计制作、成都网站制作、电商网站制作开发、成都微信小程序、微信营销、系统平台开发,与其他网站设计及系统开发公司不同,我们的整合解决方案结合了恒基网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,且不断评估并优化我们的方案,为客户提供全方位的互联网品牌整合方案!分析分析到底是啥原理:
加法运算
1、加号运算符只能用于原始数据类型,对于对象类型的值,需要进行数据转换
2、在转换后,如果其中一个运算元出现原始数据类型是“字符串”类型值时,则另一运算元强制转换为字符串,然后做字符串的连接运算
3、在其他情况时,所有运算元都会转换为原始数据类型的“数字”类型值,然后作数字的相加
Number() 转换规则
1.如果是 Boolean 值,true 和 false 将分别转换为 1 和 0。
2.如果是数字值,只是简单的传入和返回。
3.如果是 null 值,返回 0。
4.如果是 undefined ,返回 NaN。
5.如果是字符串,遵循下列规则:
(1) 如果字符串截去开头和结尾的空白字符后,不是纯数字字符串,那么最终返回结果为
NaN
。
(2) 如果是字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即“1”变成1,“123”会变成123,而“011”会变成11(前导的零被忽略了);
(3) 如果字符串中包含有效的浮点格式,如“1.1”,则将其转换为对应的浮点数值(同样也会忽略前导零);
(4) 如果字符串中包含有效的十六进制格式,例如
0xf
,则将其他转换为相同大小的十进制整数值;
(5) 如果字符串是空的(不包含任何字符),则将其转换为 0;
(6) 如果字符串中包含除上述格式之外的字符,则将其他转换成
NaN
。
6.如果是对象,则调用对象的 valueOf() 方法,然后依照前面的规则转换返回的值。如果转换的结果是 NaN,则调用对象的 toString()
方法,然后再次依照前面的规则转换返回的字符串值。
示例
console.log(Number(undefined)) // NaN console.log(Number(null)) // 0 console.log(Number(NaN)) // NaN console.log(Number('')) // 0 console.log(Number({})) // NaN console.log(Number({a:1})) // NaN console.log(Number([])) // 0 console.log(Number([1])) // 1 console.log(Number([1,2])) // NaN console.log(String(undefined)) // 'undefined' console.log(String(null)) // 'null' console.log(String(NaN)) // 'NaN' console.log(String({})) // '[object Object]' console.log(String({a:1})) // '[object Object]' console.log(String([])) // '' console.log(String([1])) // '1' console.log(String([1,2])) // '1,2'
分析
1.+[],[] 是对象,依据第六条规则,转换的结果是 NaN,然后调用对象的 toString() 方法,得到 '' 空字符串,Number('') => 0,所以 +[] => 0,结果为数字 0
2.0 + [],得到 0 + '' => '0' ,结果为字符串 0
3.{} + [],得到 '[object Object]' + '' => '[object Object]',结果为字符串 [object Object]
其他以此类推可得。
结果
console.log(+[]) // 0 console.log(0 + []) // '0' console.log(0 - []) // 0 console.log([] + []) // '' console.log({} + []) // '[object Object]'
你对了没?
自己是从事了五年的前端工程师,不少人私下问我,2019年前端该怎么学,方法有没有?
没错,年初我花了一个多月的时间整理出来的学习资料,希望能帮助那些想学习前端,却又不知道怎么开始学习的朋友。
这里推荐一下我的前端学习交流q-u-n-,里面都是学习前端的从最基础的HTML+CSS+JS【炫酷特效,游戏,插件封装,设计模式】到移动端HTML5的项目实战的学习资料都有整理,送给每一位前端小伙伴。2019最新技术,与企业需求同步。好友都在里面学习交流,每天都会有大牛定时讲解前端技术!
点击: 加入