undefined既是一个基本数据类型也是一个原始值数据
- 系统会给一个未赋值的变量赋值为undefined,返回的类型也是undefined
var a;
console.log(a); // 值undefined
console.log(typeof a); // 类型undefined
- 调用一个有参数的函数但是不传参,这个参数也是undefined
function test(a){
console.log(a); // 值undefined
console.log(typeof a); // 类型undefined
return a // // 值undefined
}
console.log(test());
- 函数内部没有显式return东西时,系统默认返回undefined
function test(){
var a = 9
}
console.log(test()); // undefined
undefined还是全局window上的一个属性
window.undefined.png- 这个属性是只读的,不可配置,不可枚举
console.log(window.undefined); // undefined
window.undefined = '123'
console.log(window.undefined);
for (let k in window) {
if(k === undefined){
console.log("访问到了");
}
}
- 不可重新定义
Object.defineProperty(window, "undefined", {
enumerable: true,
writable: true,
configurable: true
})
//直接报错
Uncaught TypeError: Cannot redefine property: undefined
at Function.defineProperty (<anonymous>)
at test.html:9
undefined可以做变量名吗??
- 全局作用域下
var undefined = 1
console.log(undefined); // undefined
console.log(window.undefined); // undefined
- 局部作用域下
function test(){
var undefined = 1
console.log(undefined); // 1
}
test()
undefined在局部作用域可以作为变量,undefined不是关键字也不是保留字,上面也说了在全局下,undefined是只读的,所以在局部作用域中就可以使用,严格模式下仍然可以。但是开发中还是避免使用它做变量名
判断类型
如果要判断某个变量是否是undefined,必须使用“===”而不能使用“==”
var a;
if(a === undefined){
console.log("执行了"); // 可以执行
}
var b;
if(a == undefined){
console.log("执行了"); // 可以执行
}
为的就是与null进行区分,当a = null时,a == undefined返回的结果就是true
var a = null;
if(a == undefined){
console.log("执行了");
}
网友评论