为null是有效的javascript属性名称
Is null a valid javascript property name?
Javascript对象可以用作映射。以下全部为有效代码:
var x = {};
x.a = 1;
x['b'] = 2; // the same as x.b = 2;
x[3] = 3; // x.3 won't work, but this syntax works fine. Also, x[3] == x['3'].
x['What, this works too?!?!?'] = 'Yup, it does!';
但今天我测试了另一个病例。。。似乎有效,但在我的脑海中升起了一些警告信号,因为它看起来。。。错误:
x[null] = 42;
现在,如果这能像预期的那样工作,那将是非常酷的(那时我不必重写一堆代码),但我能依赖它吗?或者,这只是一些未记录的行为,在所有现代浏览器中都会发生,但在下一版本的谷歌Chrome上可能会停止工作?
属性方括号之间的任何内容都将转换为字符串。null
变为"null"
,这是一个有效的属性。
它是有效的ECMAScript 5,但在某些版本的Internet Explorer中可能会遇到问题。
这一切都很好:
x = {};
x[null] = 42;
x[null];
// 42
x = {"null": 42};
x[null];
// 42
然而,IE8不接受以下带有保留字的内容,如null
:
x.null
// Error: Expected identifier
x = {null: 42}
// Expected identifier, string or number
(即使启用了"use strict"
,上述两项都可以在Chrome中工作。)
我不能留下评论,所以我创建了一个答案。。。
虽然Rob W是正确的,但他的回答有点误导。方括号之间的项使用ToString()转换为字符串。因此,一个[null]只等于一个['ull'],因为ToString(null)=='null'
以为例
var a = 1;
var x = {}
x[a] = 20;
x['1'] = 30; -- this is exactly the same as the previous line and now x[a] == 30
如果您的环境支持ES6,并且您需要能够存储null
的值以及任何任意字符串,那么您可以使用Map。
const a = new Map();
a.set(null, 'foo')
a.set('null', 'bar')
// Map { null => 'foo', 'null' => 'bar' }
x['null'] = 42;
不过,为了避免混淆,我强烈反对这样做。
属性名称是字符串。每个字符串都会起作用,即使是表示保留标识符的字符串也是如此。
所有不是字符串的东西都将被转换为字符串(通过调用对象的toString()
方法):
a = ['FOO']; // an array
o = {}; // an object
o[a] = 'foo'; // using a as the property name
// o now is:
{
FOO: 'foo'
}
相关文章:
- 保存具有相同属性 JavaScript 的元素上的值
- DOM 元素上的空样式属性:JavaScript
- 基于一个属性Javascript检索多个对象
- xml获取属性javascript不会;无法处理childNodes
- 当输入填充了必需的属性javascript/html/css时,如何更改焦点颜色
- 如何处理未定义属性的未定义属性 javascript 类型错误
- 向嵌套对象添加属性 - Javascript
- 属性 Javascript 的访问属性
- 更改链中的 css 属性 - JavaScript
- 更改属性 Javascript 方式的值
- 如何从 url 解析 xml 获取属性 javascript
- 语法错误:缺少:在属性 javascript 之后
- 创建 if 条件基于 CSS 属性 -- JavaScript
- 访问节点的属性javascript二进制搜索树
- 访问父函数属性Javascript
- 为什么未定义此对象的属性?Javascript
- 访问私有属性Javascript OOP
- 访问数组中的属性?(Javascript)
- 动态添加参数作为对象的属性-JavaScript
- 冲突/方法/属性Javascript错误