在我的脚本中需要创建一个哈希表,我在谷歌搜索这个.大多数人都为此目的推荐JavaScript对象.问题是,哈希表中的一些键有".".在他们中.我可以使用关联数组轻松创建这些键.
我不明白为什么关联数组很糟糕.在我看到的网站中提到的第一件事是长度属性.我来自Perl背景,我使用哈希.最常见的用途是从密钥中获取值,检查密钥是否存在,删除键值对,添加键值对.如果这些是我的常用用途,我可以安全地使用关联数组吗?
Jus*_*ner 88
在JavaScript中,对象是关联数组......对于它们没有单独的概念.您也可以安全地使用'.' 在密钥名称中,但您只能使用括号表示法访问该值:
var foo = {}
foo['bar'] = 'test';
foo['baz.bin'] = 'value';
alert(foo.bar); // shows 'test'
alert(foo['baz.bin']); // shows 'value'
Run Code Online (Sandbox Code Playgroud)
如果您已经使用它们并且它们正常工作,那么您就是安全的.
Esa*_*ija 33
在javascript对象和数组中几乎是一回事,数组具有一些神奇的功能(自动调整长度属性等)和适用于数组的原型方法.构造对象比使用关联数组要容易得多:
var obj = {"my.key": "myValue"};
Run Code Online (Sandbox Code Playgroud)
VS
var obj = [];
obj["my.key"] = "myValue";
Run Code Online (Sandbox Code Playgroud)
因此,永远不要使用数组对象,而只使用常规对象.
一些功能:
var obj = {}; //Initialized empty object
Run Code Online (Sandbox Code Playgroud)
删除键值对:
delete obj[key];
Run Code Online (Sandbox Code Playgroud)
检查密钥是否存在:
key in obj;
Run Code Online (Sandbox Code Playgroud)
获得关键值:
obj[key];
Run Code Online (Sandbox Code Playgroud)
添加键值对:
obj[key] = value;
Run Code Online (Sandbox Code Playgroud)
Dom*_*let 19
因为在javascript中没有内置关联数组这样的东西.这就是为什么它很糟糕.
事实上,当你使用类似的东西:
theArray["a"] = "hello, world!";
Run Code Online (Sandbox Code Playgroud)
它只是创建一个名为"a"的PROPERTY,并将其值设置为"hello,world!".这就是为什么长度始终为0,以及输出alert(theArray)为空的原因.
希望这可以帮助!
实际上,"关联数组"与ECMAscript中的"类数组对象"几乎相同.甚至Arrays是ECMAscript中的对象,只是有数字键(在后台仍然是字符串)的例外,.length属性以及一些继承的方法Array.prototype.
因此,perl哈希和ECMAscript对象的行为类似.您可能不知道您不仅可以通过点访问对象属性,还可以使用括号和字符串来访问对象属性
var myObj = { foo: 42 };
myObj.foo; // 42
myObj['foo']; // 42
Run Code Online (Sandbox Code Playgroud)
知道这一点,你也可以使用键 .
var myObj = { };
myObj['hello.foo.world'] = 42;
Run Code Online (Sandbox Code Playgroud)
当然,您只能使用括号表示法访问该键.
.如果您愿意,可以在JS对象(也称为关联数组)上使用键名,它们可以毫无问题地被接受.缺点是您不能使用带有虚线键的快捷符号,例如
var x = {};
x['hello'] = 'there';
alert(x.hello);
Run Code Online (Sandbox Code Playgroud)
是完全可以接受的,并会在其中弹出"有"的警报.但是如果你使用虚线名称:
var x = {};
x['this.is'] = 'sparta';
alert(x.this.is);
Run Code Online (Sandbox Code Playgroud)
将失败,因为Javascript将查找this在x对象中命名的属性,该属性不存在.只有this.is属性.
| 归档时间: |
|
| 查看次数: |
53496 次 |
| 最近记录: |