关于JavaScript中1['']返回undefined而1[]抛出语法错误的疑问
为什么JavaScript中1['']返回undefined而1[]会抛出语法错误?
嘿,这个问题问得相当到位,咱们把这两种情况拆开来讲清楚:
先看 1[''] 为什么返回undefined
在JavaScript里,当你尝试用属性访问语法(比如.或[])操作一个原始类型值(比如数字1)时,JS会自动把这个原始值"装箱"成对应的包装对象(这里就是Number对象)。
现在,['']里的空字符串是一个合法的属性名——对象的属性名可以是任意字符串,包括空串。但这个Number对象本身并没有名为空字符串的属性,所以当你访问一个对象上不存在的属性时,JS就会返回undefined。
你可以试试对比这个:1['toString'],它能正常返回Number对象的toString方法,因为这个属性确实存在;而1['']对应的属性不存在,所以得到undefined。
再看 1[] 为什么抛出语法错误
这是语法解析阶段就直接报错了,根本轮不到执行阶段。JavaScript的语法规则明确要求,方括号属性访问器[]内部必须包含一个合法的表达式——哪怕是空字符串''、null、undefined这些都是合法的表达式,但空的[]完全不符合语法规范,JS引擎根本看不懂这个写法,所以直接抛出Uncaught SyntaxError: Unexpected token ']'的错误。
简单来说,1['']是合法的语法,只是访问了不存在的属性;而1[]本身就是无效的语法,连执行的机会都没有。
备注:内容来源于stack exchange,提问作者Andrew Parks
相关产品推荐
相关产品推荐

