ecmascript 5或6中未定义键和null键的行为
Behaviour of undefined and null keys in ecmascript 5 or 6
我很想知道当javascript中的未定义或null键访问对象时,正确的行为是什么。
我检查了它在Chrome 46、Firefox 42和节点0.12.0中的行为,结果是一样的:
var obj = {};
obj[undefined] = 'foo';
obj[undefined]; // 'foo'
obj['undefined']; // 'foo'
obj; // {undefined: 'foo'}
或:
var obj = {};
obj[null] = 'foo';
obj[null]; // 'foo'
obj['null']; // 'foo'
obj; // {null: 'foo'}
然后,似乎undefined
和null
被强制为字符串'undefined'
和'null'
。但是,如果我阅读ecmascript规范,就会发现使用了RequireObjectCoercible
。阅读RequireObjectCoercible规范时,我发现当它作为参数传递未定义或null时,会引发TypeError异常。
因此,我不明白为什么我在检查时会重现另一种行为
编辑:
感谢Andreas和Bergi
我理解这种行为是因为:
12.3.2.1运行时语义:评估
[…]
- 让propertyKey为ToPropertyKey(propertyNameValue)
7.1.14 ToPropertyKey(参数)
[…]
- 返回ToString(键)
7.1.12 ToString(参数)
抽象操作ToString根据表12:将参数转换为String类型的值
[…]
未定义|返回"未定义";。
Null |返回"空";。
对吧?
RequireObjectCoercible
是在构造属性引用之前对基值调用的,而不是对属性调用的。obj
对一个对象是可强制的:-)当你做undefined.x
或null[y]
之类的事情时,它确实会抛出。
相关文章:
- 无法获取属性'selectedIndex'的未定义引用或null引用
- 为什么localStorage[“..”]未定义,而localStorage.getItem(“..”)为null
- 当null应该在javascript中使用而不是未定义时
- React.createElement:类型不应为null或未定义
- 对象为null或IE9中存在未定义错误
- 如何在JavaScript中检查变量是否为null和/或未定义
- Microsoft JScript运行时错误:无法获取属性'的值;样式':对象为null或未定义
- 无法获取属性'字符串'的未定义或null引用IE 11 ASP.NET
- SCRIPT5007:无法获取属性'长度'的未定义引用或null引用
- 无法获取属性'setActionableButtonState'的未定义引用或null引用
- Highcharts无法设置属性'的值;要点':对象为null或未定义
- IE错误:无法设置属性'的值;样式':对象为null或未定义
- moment:Array.prototype.some在null或未定义时被调用
- 无法获取属性'偏移'的未定义引用或null引用
- 具有null或未定义值的JavaScript字符串串联行为
- Javascript-函数获取数组元素参数未定义/为null
- 无法在jasmine it函数中将未定义或null转换为对象
- JS:未定义值和未定义类型,以及null值和null类型之间的区别
- IE:无法获取属性'的值;clientWidth':对象为null或未定义
- 检查AJAX响应数据是否为空/空白/null/未定义/0