当我为函数keys
命名参数时,我看到了奇怪的行为。在第一个函数(set)中,我将它命名为keeys,并且它按预期工作,在第二个函数(xset)中我称之为键,这没有任何意义。我看了@javascript的保留字,并没有人提到密钥或设置为关键字,但Chromium脚本控制台(和SO)颜色设置(但不是键),好像它是一个关键字,如var,return,for,true。 ..
无论如何,这是代码:
<html>
<body>
<script type='text/javascript'>
function set (keeys) {
var result = {};
for (var i = 0; i < keeys.length; i++)
result[keeys[i]] = true;
return result;
}
function xset (keys) {
var result = {};
for (var i = 0; i < keys.length; i++)
result[keys[i]] = true;
return result;
}
var myset1 = set(['a','b','c','d','e']);
var myset2 = xset(['a','b','c','d','e']);
</script>
</body>
</html>
这是Chromium的调试器输出。断点@第一行集:
> keeys
> ["a", "b", "c", "d", "e"]
> keeys.length
> 5
断点@xset的第一行:
> keys
> function (object)
{
return Object.keys(object);
}
> keys.length
> 1
答案 0 :(得分:0)
我并不完全正面,但我最好的猜测是它与版本1.8.5中引入Javascript的Object.keys有关。
另请注意,javascript数组实际上只是javascript 对象 ,这将进一步加剧问题。
答案 1 :(得分:0)
非常好奇,在Chromium 13.0.751.0上我看到以下
> keys
bound: function (object)
{
return Object.keys(object);
}
> window.keys
undefined
> (1).keys
undefined
> "asd".keys
undefined
> {}.keys
SyntaxError: Unexpected token .
> [].keys ()
TypeError: Object has no method 'keys'
任何人都能明白这一点吗?
答案 2 :(得分:0)
这很可能是一个错误,因为以下内容对我来说正常(Chrome 11.0.696.60):
function bloop(keys) {
console.log(keys);
}
并且,在编写此测试之后,在控制台中运行您的代码,然后在jsbin中(打开您的控制台)。完美无缺地工作。如果您愿意,report it as a bug参加Chromium项目。
如果您不想使用keys
,解决问题的一种可能方法是在脚本顶部运行:
if (keys !== undefined)
var keys = undefined;
然后你可以正常恢复。
编辑:对于那些困惑的人,ES5(闪亮的闪亮JavaScript)中添加了一个名为Object
的{{1}}变量的新功能。它被称为:
keys
它返回Object.keys({suzy : 4, companion : 'cube', turtle : 'orange'});
//returns ["suzy", "companion", "turtle"]
//or, more abstractly
Object.keys(obj);
中所有键的数组。请注意,obj
位于keys
,而不是Object
,因此没有Object.prototype
或"hi".keys()
。
现在,出于开发目的,Chromuim团队引入了一些特定于控制台的功能(如obj.keys()
),这些功能只能通过控制台调用,而不能通过其他任何地方调用。其中一个是clear
的快捷方式,称为Object.keys
。
由于可能是一个错误,这些功能泄漏,导致问题。