- 即是一个数据原始类型, 也是一个原始值数据
- 全局对象上的一个属性
window.undefined
console.log(window.undefined) // undefined
window.undefined = 1;
console.log(window.undefined) // undefined
// 不可写 writable: false
delete window.undefined;
console.log(window.undefined) // undefined
// 不可配置 configurable: false
for(var k in window){
// 不会执行 不可枚举 enumerable: false
if(k === undefined){
console.log(k);
}
}
Object.defineProperty(window, 'undefined', { // 报错 Cannot redefine property: undefined
// 不可重新定义
enumerable: true,
writable: true,
configurable: true
})
系统会给一个末赋值的变量自动赋值为 undefined,类型也是 undefined
var a; console.log(a); // undefined console.log(typeof a); // undefined
实参未传入相应的值时,对应形参是 undefined ```javascript function test(a){ console.log(typeof a); // undefined return a; }
console.log(test()); // undefined;
5. 函数内部没有显式返回一个值的时候,系统默认给函数返回 undefined
```javascript
function test(){
console.log(123);
}
console.log(test()); // undefined
全局作用域中无法把 undefined 当成一个变量使用,相当于第 2 点的 writable: false
var undefined = 1; console.log(undefined); // undefined console.log(window.undefined); // undefined
- 但局部作用域可以(包括在严格模式下),说明 undefined 不是 JS 的保留字和关键字 ```javascript function test(){ ‘use strict’; // undefined 不是 JS 的保留字和关键字 var undefined = 1; console.log(undefined); // 1 }
test();
7. undefined 相关判断
```javascript
var a;
if(a === undefined){
console.log(true);
}else{
console.log(false);
}
// true
var a == null;
if(a == undefined){
console.log(true);
}else{
console.log(false);
}
// true
var a == null;
if(a === undefined){
console.log(true);
}else{
console.log(false);
}
// false
var a;
if(type a === 'undefined')
console.log(true);
}else{
console.log(false);
}
// true
console.log(typeof b); // undefined 未定义时, typeof 一概为 undefined
// 判断是为声明了变量
var a;
if('a' in window){
console.log(true);
}else{
console.log(false);
}
// true
- void(n) 表示 对 n (一定要有值) 进行求值,void() 始终返回 undefined
- 使用 void(0) / window.undefined 可以在局部作用域中拿到真正 undefined 值,以防止使用 undefined 作为变量名
- void 主要出现在以前不规范的编写中,使用 undefined 作变量名,现在出现很少,可能出现在一些底层封装中。 ```javascript console.log(void(0) === undefined); // true
function test(){ var undefined = 1;
console.log(undefined); // 1 console.log(void(0), window.undefined); // undefined console.log(undefined === void(0)); // false }
test();
```javascript
var a, b, c;
a = void(b = 1, c = 2);
console.log(a, b, c); // undefined 1 2
阻止不跳转的伪协议
<a href="javascript: void(0);"></a>
<a href="javascript:;"></a>