已经在chrome和firefox中都试过了,经过一样,用name来接收这个数组的时候就会是张这个东东,谁能告诉我这是为啥(node却没事儿)
已经在chrome和firefox中都试过了,经过一样,用name来接收这个数组的时候就会是张这个东东,谁能告诉我这是为啥(node却没事儿)
window.name
是 DOM
对象 window
的一个属性name
主要用于为超链接和表单设置目标(target)window
<a href='https://segmentfault.com/q/1010000006679126' target='_windowname_'>window.name</a>
<form target='_windowname_'></form>
这个问题就如同下面这个问题报错一样
function List() {
this.toString=function(){
return []
}
}
var name = new List()
因为全局的name会挂在到window上面,window的name属性应该是浏览器做了监听回调处理,里面实现了基本类型的计算,上面那个split('&')的结果是['张三','n男'],在name赋值后,浏览器会调用监听回调,回调里面有字符串类型运算,这样就会将其转化为字符串,数组转化为字符串的结果是"张三,n男",因此name[0]=张
同理我上面那个报错的原因是,监听回调的字符串运算过程会先调用valueOf(默认返回一个对象),不是基本类型会继续调用toString,返回了数组,所以会报错对象无法转换成原始值
以上window.name改变后,会执行监听回调的过程属于我个人脑补的,纯属个人猜测,未经过验证
8 回答5.8k 阅读✓ 已解决
9 回答9.1k 阅读
6 回答4.7k 阅读✓ 已解决
5 回答3.5k 阅读✓ 已解决
4 回答7.9k 阅读✓ 已解决
7 回答9.7k 阅读
5 回答7.1k 阅读✓ 已解决
window.name 只能为字符串,访问[0]返回字符串的第一个字符
在函数内的局部变量就没事了
PS:尽量少的全局变量。