今天突然被問到一個問題:我定義了一個數(shù)組 var name = ["leon", "jack", "tom"];
白嘁,但是為什么通過下標(biāo)獲取不到正確的值阔加,而且居然能獲取到 ,
遗嗽。當(dāng)時我以為是什么細(xì)節(jié)問題进宝,仔細(xì)檢查了一下代碼后發(fā)現(xiàn)并沒有什么問題恨搓,甚至開始懷疑JS數(shù)組的定義方法,用 var name = new Array("leon", "jack", "tom");
定義了之后還是出現(xiàn)同樣的問題好爬。這下徹底懵了局雄,想了一圈后突然想起來有一次寫表單的時候也遇到了類似問題,當(dāng)時為了獲取頁面中的 input
標(biāo)簽存炮,而這個 input
是用來輸入姓名的,我也就理所當(dāng)然的在獲取的時候這么寫了:var name = document.getElementById('idName');
蜈漓,這樣沒有報錯穆桂,但是在獲取他的 value
值的時候一直是 undefined
,即使給他一個初始的 value
融虽,最后獲取到的也還是 undefined
享完。而其他的變量都能正常使用,這讓我不禁懷疑是變量名的問題有额,改了變量名之后果然也正常了般又,當(dāng)時由于任務(wù)也沒多想,這個問題也就擱置了巍佑,今天有幸又與他見面了茴迁。改了數(shù)組名之后,果然正常了萤衰,這下有必要好好理一下關(guān)于 name
變量名的問題了堕义。
定義數(shù)組
先看代碼
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
var name = ["leon", "jack"];
console.log("name:", name, name.length, typeof name);
var names = ["leon", "jack"];
console.log("names:", names, names.length, typeof names);
</script>
</body>
</html>
乍一看兩個輸出的結(jié)果應(yīng)該是一樣的,但結(jié)果呢脆栋?
很明顯倦卖,以
name
命名的數(shù)組變成了字符串洒擦。
定義對象
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="">
<input id="txt1" type="text" value="txt1">
<input id="txt2" type="text" value="txt2">
</form>
<script>
var name = document.getElementById('txt1');
console.log(name.value, typeof name);
var txt = document.getElementById('txt2');
console.log(txt.value, typeof txt);
</script>
</body>
</html>
6 結(jié)果可想而知,用
name
做變量名的變量又變成字符串了怕膛。
總結(jié)
name
既不是關(guān)鍵字也不是保留字熟嫩,但他是屬性,這也就是問題所在褐捻,這樣的話其他的屬性也不能用作變量名(不是全部邦危,僅僅是一部分,但還是建議不要使用屬性做變量名)舍扰,比如 top
也不行倦蚪,但是 left
, bottom
卻可以边苹。另外 location
陵且,self
也不可以,而造成這一切的原因是這些變量名是JS的主機(jī)變量个束,永遠(yuǎn)不能被重新聲明慕购。更詳細(xì)的說明在 這里。