前幾天在練習js代碼的時候,碰到了一個坑,這是讓人醉了。
html代碼如下:
<div>
<div>
<!--輸入 123456-->
<lable>請輸入員工編號</lable>
<input id="keyWord" type="text">
</div>
<div>
<!--輸入 moran-->
<lable>請輸入員工姓名</lable>
<input id="staffName" type="text">
</div>
<div>
<!--點擊保存,輸出監聽函數中的log信息 @author www.yaoxiaowen.com-->
<button id="save">保存</button>
</div>
</div>
js代碼如下:
var keyword=document.getElementById("keyWord");
var name=document.getElementById("staffName");
var save=document.getElementById("save");
//輸出: keyword=[object HTMLInputElement] keyword.value =
console.log("keyword=" + keyword + "\t keyword.value = " +keyword.value);
var keyValue = keyword.value;
//輸出: ===
if (keyValue === ""){
console.log("===");
}else {
console.log("!==");
}
//輸出:name=[object HTMLInputElement] name.value = undefined
console.log("\t name=" + name + "\t name.value = " +name.value);
//@author www.yaoxiaowen.com
save.onclick=function(){
//輸出: keyword=[object HTMLInputElement] keyword.value = 123456
console.log("keyword=" + keyword + "\t keyword.value = " +keyword.value);
//輸出:name=[object HTMLInputElement] name.value = undefined
console.log("\t name=" + name + "\t name.value = " +name.value);
//輸出: document.getElementById('staffName').value = moran
console.log("document.getElementById('staffName').value = " + document.getElementById("staffName").value);
}
代碼注釋中已經寫了相應的注釋輸出,完全一樣的 <input>
標簽,js中獲得Element也是一樣的操作,可是 name
和keyword
它們的行為表現就是不一樣。
盯着這些代碼看了半天,各種調試測試,可是還是想不明白。最后意外的發現,把 name
這個變量名修改成其他值就好了,比如name1
之類的。
這就讓我懷疑人生了。c,java,js等語言中那些關鍵字,保留字,比如for
,while
,break
,private
,class
,,throw
等這些不能用於變量名是常識,可是一個name
是個普通的字符串啊。
然后去google搜索,竟然發現了某篇博客的這句話:
有些東西是保留字,避免使用就行了,沒有為什么... js中的保留字會導致奇怪的結果,各個瀏覽器保留字不同,導致結果也不同,盡量不要使用name,value,if,in,for之類的東西做變量名
然后在菜鳥教程,發現了一個(在我看來)很龐大的保留字,關鍵字表點擊查看。
好吧,js中的坑真多,菜鳥教程的那些保留字表格,還是多讀幾遍吧,免得最后因為這個細節問題而出現難以調試的bug。
github: https://github.com/yaowen369
歡迎對於本人的博客內容批評指點,如果問題,可評論或郵件(yaowen369@gmail.com)聯系
<p >
歡迎轉載,轉載請注明出處.謝謝
</p>
<script type="text/javascript">
function Curgo()
{
window.open(window.location.href);
}
</script>