dev*_*ept 10 javascript arrays
我正在做一些测试,在javascript中将值转换为整数,并在遇到这种奇怪的行为时在控制台中打印输出.
console.log(+[]) ==> 0
console.log(+[123]) ==> 123
console.log(+['123']) ==> 123
console.log(+[123, 456]) ==> NaN
console.log(+['123asdf']) ==> NaN
Run Code Online (Sandbox Code Playgroud)
我认为这些值是使用parseInt转换的,但结果却不是这样我去了javascript转换表http://www.w3schools.com/js/js_type_conversion.asp
这让我更好地了解如何执行转换.根据此表
[] => 0
[20] => 20
[10,20] => NaN
["twenty"] =>NaN
["ten","twenty"] => NaN
Run Code Online (Sandbox Code Playgroud)
因此,他们显然采用数组的第一个值并使用指定的规则进行转换.parseInt的规则不适用.
我测试得出这个结论.您可以将所有内容嵌套,它会给您相同的结果.
console.log(+[[[[[[[[[[[10]]]]]]]]]]]) => 10
Run Code Online (Sandbox Code Playgroud)
那么我想,好吧,如果是这样的话
console.log(+[undefined]) will return NaN
console.log(+[null]) will return 0
console.log(+[false]) will return 0
Run Code Online (Sandbox Code Playgroud)
这些是从javascript转换表到整数的预期值,但结果是
console.log(+[undefined]) => 0
console.log(+[null]) => 0
console.log(+[false]) => NaN
Run Code Online (Sandbox Code Playgroud)
最后一个是最奇怪的,因为false被转换为0,而不是NaN.有人可以解释这种奇怪的行为或解释如何执行此转换吗?
在一元+运营商内部使用ToNumber抽象操作.
所述ToNumber抽象操作,当施加到对象,调用该对象的toString
方法(由的方式[[DefaultValue]]
内部方法),然后再施加ToNumber对所得字符串表示的操作.
这里有趣的是Array的toString
方法.请注意,[false].toString()
与[undefined].toString()
或完全不同[null].toString()
.当我们检查规范时Array.prototype.toString
,我们看到它在内部使用Array.prototype.join
.join
算法的第8步说:
- 如果element0是
undefined
或null
,则令R为空String; 否则,设R为ToString(element0).
因此,任何包含单个的数组null
或undefined
字符串化为空字符串(ToNumber number-ifies to 0
),而其他值将字符串化为其他字符串(NaN
如果字符串为非数字,则将其编号为if -ify ).
+[undefined]
是一样的+""
,虽然+[false]
是一样的+"false"
.
归档时间: |
|
查看次数: |
607 次 |
最近记录: |