试着在你的浏览器上运行这段儿代码, 是不是很惊奇?
var name = [1,2,3,4]; console.log(Array.isArray(name)); //false console.log(typeof name); //string
而只需要换一换变量名
var name1 = [1,2,3,4]; console.log(Array.isArray(name1)); //true console.log(typeof name1); //object
是不是好奇异!!!!?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
在 console 里的 var 是写到 window 上的。var name = [1,2,3,4]; 相当于window.name = [1,2,3,4];
var name = [1,2,3,4];
window.name = [1,2,3,4];
而 window 的 name 属性应该是用Object.defineProperty设定了 get set 函数的。
Object.defineProperty
你可以通过Object.defineProperty(window,"name",{get:()=>[1,2,3,4]})来设置 name
Object.defineProperty(window,"name",{get:()=>[1,2,3,4]})
Object.defineProperty(window,"name",{get:()=>[1,2,3,4]}) console.log(Array.isArray(name)); // true console.log(typeof name); // object
name是BOM的一个属性https://developer.mozilla.org...
应该是和window.name属性冲突了,在浏览器的全局作用于中本生就有name,是用来 获取/设置窗口的名称,并且默认的是String类型。应该是你设置name = [1,2,3]的时候,浏览器把数组通过toString方法转化为了字符串赋值给了name。如果你在局部作用域中这样写就不会错。
window.name
name
name = [1,2,3]
toString
(function(){ var name = [1,2,3,4]; console.log(Array.isArray(name)); //true console.log(typeof name); //object })()
在 console 里的 var 是写到 window 上的。
var name = [1,2,3,4];
相当于window.name = [1,2,3,4];
而 window 的 name 属性应该是用
Object.defineProperty
设定了 get set 函数的。你可以通过
Object.defineProperty(window,"name",{get:()=>[1,2,3,4]})
来设置 name
name是BOM的一个属性
https://developer.mozilla.org...
应该是和
window.name
属性冲突了,在浏览器的全局作用于中本生就有name
,是用来 获取/设置窗口的名称,并且默认的是String类型。应该是你设置name = [1,2,3]
的时候,浏览器把数组通过toString
方法转化为了字符串赋值给了name
。如果你在局部作用域中这样写就不会错。window.name