为何JavaScript中myArray[length]会返回数组第一个元素?
拆解这段JavaScript代码的执行逻辑
嘿,这个问题挺有意思的,我来给你一步步梳理清楚为啥这段代码会输出Hello:
首先先把你的代码再贴出来方便对照:
var myArray = ["Hello", "world"] console.log(myArray[length])
核心问题:未声明的length标识符
你代码里的length并没有绑定到数组的myArray.length,也没有用var/let/const声明——这是一个未声明的变量。
非严格模式下的变量查找规则
在JavaScript的非严格模式(这段代码默认就是非严格模式)中,当你访问一个未声明的变量时,引擎会自动去全局对象上查找对应的属性:
- 在浏览器环境里,全局对象就是
window; window.length是浏览器提供的一个内置属性,它的作用是返回当前页面中<frame>或<iframe>的数量。
为什么输出Hello?
如果你的页面里没有任何框架(绝大多数普通页面都是这样),window.length的值就是0。这时候myArray[length]就等价于myArray[0],而数组索引0对应的元素正是"Hello",所以console.log就会输出它。
额外补充几个验证场景
- 如果你的页面里嵌入了1个
<iframe>,那window.length会变成1,这时候代码会输出"world"; - 如果在代码开头加上
'use strict'开启严格模式,访问未声明的length会直接抛出ReferenceError,因为严格模式不允许这种隐式的全局变量访问。
内容的提问来源于stack exchange,提问作者Rush
相关产品推荐
相关产品推荐

