var num = 1111
console.log(num[0]) // undefined
为什么不会报错,而是返回 undefined?
var num = 1111
console.log(num[0]) // undefined
为什么不会报错,而是返回 undefined?
因为特定情况下,基本类型会在需要的时候被转为包装类型,相当于一个隐式的强制类型转换,这里用到[]取值就会把基本的数字转成了Number类型的对象。
Boolean,Number,String三种包装类型对应三种基本类型。
这其中包含三个知识点:
js
里的基础对象的区别:变量定义可以为原始数据类型number
、string
等,而js
里另有一套Number
、String
等内置对象类型。num = 1111
时定义的是一个原始数据类型的变量。此时它还不是js
的内置Number
对象类型。js
内置对象的功能时会把原始数据包装成内置对象再执行相应的方法,比如这个例子是num = 1111
,当使用到num[0]
时就在内部执行了Number(num)
,这个就是隐式转换。num[0]
相当于是一个对象,在对象上查找一个为'0'
的属性,会触发对象内置的属性查找方法,此方法是利用原型链的机制来查找属性的,即num
上没定义这属性,会继续往num
的原型链上查找,找到最后就是Object.prototype
,这个对象上也没有定义'0'
这个属性,最后会报undefined
,这是js
机制决定的。即便你有一个属性是undefined
,这样的查找方式也无法将有没有这个属性真正区分开。10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
因为

Number.prototype
上没有'0'
这个属性,所以返回undefined