javascript - 为什么数组名为name时, 这个数组会自动转换为字符串?如此的怪异.
伊谢尔伦
伊谢尔伦 2017-04-11 12:50:02
0
4
361

试着在你的浏览器上运行这段儿代码, 是不是很惊奇?

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伐。

全員に返信(4)
小葫芦

在 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

Object.defineProperty(window,"name",{get:()=>[1,2,3,4]})
console.log(Array.isArray(name));  // true
console.log(typeof name); // object
いいねを押す +0
PHPzhong

name是BOM的一个属性
https://developer.mozilla.org...

いいねを押す +0
PHPzhong

应该是和window.name属性冲突了,在浏览器的全局作用于中本生就有name,是用来 获取/设置窗口的名称,并且默认的是String类型。应该是你设置name = [1,2,3]的时候,浏览器把数组通过toString方法转化为了字符串赋值给了name。如果你在局部作用域中这样写就不会错。

(function(){
    var name = [1,2,3,4];
    console.log(Array.isArray(name)); //true
    console.log(typeof name); //object
})()
いいねを押す +0
小葫芦

window.name

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!