1、undefined既是JavaScript中的原始數據類型之一,也是一個原始值數據
對於有編程經驗的朋友來説,undefined是JavaScript的原始數據類型之一這一點毋庸置疑,沒有什麼可以贅述的,因為ECMAScript規範中就將undefined定義為原始數據類型之一。
undefined也是一個原始值數據,我的理解是,當一個聲明瞭但是未初始化的變量會默認賦值為字符串“undefined”
<script>
let num;
console.log(num)//undefined
</script>
2、undefined是全局對象上的一個屬性
當我們直接輸出全局window對象時,就可以找到undefined的存在,當然也可以直接輸出window.undefined得到undefined
<script>
console.log(window);
console.log(window.undefined);//undefined
</script>
3、undefined不可刪,不可重新定義,不可枚舉
(1)undefined不可刪除
以下操作雖然使用delete操作想將undefined刪除,但是達不到效果,使用delete操作後,再次輸出undefined依然可行
<script>
delete window.undefined;
console.log(undefined);//undefined
</script>
(2)undefined不可重新定義
以下操作會報錯
<script>
Object.defineProperty(window,'undefined',{
enumerable:true,
writable:true,
configurable:true
});
</script>
(3)undefined不可枚舉
既然undefined是全局對象window中的一個屬性,那麼是否可以通過循環遍歷的方式將undefined從window對象中遍歷出來呢?結果很遺憾,不可以。
以下代碼不會輸出任何內容
<script>
for(k in window){
if(k===undefined){
console.log(key)//不會輸出內容
}
}
</script>
4、undefined不是JavaScript的關鍵字和保留字,
undefined不是JavaScript的關鍵字和保留字,在全局作用域中不重新賦值,但是在函數作用域中可以重新賦值,但是不建議這麼做,不建議將undefined作為變量、對象、函數等名稱使用,
在全局作用域中,undefined不可以重新賦值,即使重新賦值了,但是無效,在全局中輸出的依然是undefined
<script>
window.undefined=1;
console.log(window.undefined);//undefined
</script>
但是在局部作用域中,可以將undefined作為變量名重新賦值,但是不建議這麼做。
以下fun函數執行輸出結果為2
<script>
function fun(){
let undefined=2;
console.log(undefined)//2
}
fun();
</script>
<script>
function fun(){
let undefined=2;
console.log(undefined)//2
}
fun();
</script>