JavaScript果然坑大精深啊,name莫非是保留字?

图片描述
图片描述

已经在chrome和firefox中都试过了,经过一样,用name来接收这个数组的时候就会是张这个东东,谁能告诉我这是为啥(node却没事儿)

阅读 3.6k
4 个回答

window.name 只能为字符串,访问[0]返回字符串的第一个字符
在函数内的局部变量就没事了

PS:尽量少的全局变量。

window的name属性可设置或者返回存放窗口的名称的一个字符串。

这个问题就如同下面这个问题报错一样

function List() {
    this.toString=function(){
        return []
    }
}
var name = new List()

因为全局的name会挂在到window上面,window的name属性应该是浏览器做了监听回调处理,里面实现了基本类型的计算,上面那个split('&')的结果是['张三','n男'],在name赋值后,浏览器会调用监听回调,回调里面有字符串类型运算,这样就会将其转化为字符串,数组转化为字符串的结果是"张三,n男",因此name[0]=张
同理我上面那个报错的原因是,监听回调的字符串运算过程会先调用valueOf(默认返回一个对象),不是基本类型会继续调用toString,返回了数组,所以会报错对象无法转换成原始值
以上window.name改变后,会执行监听回调的过程属于我个人脑补的,纯属个人猜测,未经过验证

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏