[英]Why is this variable returning undefined?
var place = "mundo"["Hola", "Ciao"];
为什么返回未定义? 只是因为它是垃圾?
那是完全有效的JS,尽管它没有达到您的期望。
place
初始化为String('mundo')
的'Ciao'
属性。 由于不存在,因此将其初始化为undefined
。
棘手的部分:
"Hola","Ciao"
正在使用逗号运算符,评估"Hola"
,评估"Ciao"
并返回"Ciao"
[...]
在这种情况下是财产使用权
"mundo"[]
"mundo"
被转换为String对象以访问其属性。
证明:
var place = "mundo"["Hola", "toString"];
console.log(place) // function toString() { [native code] }
字符串对象上的数组运算符将尝试索引到字符串中并从该字符串返回特定字符(在某些JS实现中),或者将尝试在该对象上查找属性。 如果索引是数字,则某些JS实现(我认为这是非标准行为)将为您提供字符串中的该字符。
// returns "m" in Chrome
"mundo"[0]
// returns undefined
"mundo"[9]
但是,不是数字的数组索引将尝试在字符串对象上查找该属性,并且在字符串对象上找不到您的特定值,因此您将得到undefined
。
// does a property lookup and returns "function toString{[native code]}
"mundo"["toString"]
// returns undefined - no propery named foo
"mundo"["foo"]
因此,由于字符串上没有类似于["Hola", "Ciao"]
任何内容的属性,因此您将获得undefined
。 从技术上讲,当您给它提供"Ciao"
属性时,浏览器实际上是在寻找它,并且由于该属性不存在,您将获得undefined
。
在一个奇怪的测试中,您可以运行以下代码来了解发生了什么:
var str = new String("mundo");
str["Ciao"] = "Hello";
alert(str["Hola", "Ciao"]); // alerts "Hello"
的工作演示: http : //jsfiddle.net/jfriend00/e6R8a/
这一切都让我想知道,这个奇怪的构造实际上是在试图实现什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.