每次遇到这个标题脑子都是空白的,然后就各种百度各种在本子上记笔记。过段时间再看到类似的问题脑子依旧是空白的,记得笔记也当废纸扔了。今天再又重新当做新的知识点学习一遍(年纪大了脑子不记事~)
undefined来自哪里?
还记得ECMAScript中的数据类型里的简单数据类型:Undefined,NUll,String,Number,Boolean,Symbol。
undefined是Undefined的唯一值(默认值)。
什么情况下会得到undefined?
以下情况:
- 声明了一个变量,但
未对其初始化时,这个变量的值就是undefined; - 对
未定义的变量执行typeof操作符也会返回undefined; - 函数如果没有使用return语句指定返回值;
- 调用函数时没有传参数值
var str;
console.log(str) //undefined
console.log(typeof str) //undefined
//number未定义
console.log(typeof number) //undefined
全局属性undefined
可以试一试我们可以显示地把一个变量初始化为undefined。但是一般而言,我们不会这样做,因为对未经初始化的值默认就会取得undefined值。况且字面量值undefined的主要目的是用于比较来区分空对象指针的。
let str = undefined
实际上是let str=window.undefined`给变赋值为undefined,其实这并不是一个值,而是一个属性名---undefined是全局对象的一个属性。因此就相当于:把一个变量window.undefined的值赋值给另外一个变量str,这个值就是原始值undefined。
局部属性undefined
其实在ESMAScript中,undefined不是保留字,这就意味着我们可以将undefined作为一个局部变量来使用,就像局部作用域中其他任何普通变量一样,没有任何特殊性,还可以对他赋予任何类型的值。
(function() {
var undefined = 'not is undefined';
console.log(undefined); //"not is undefined"
console.log(typeof undefined) // "string"
})()
可是undefined的值和类型都已经发生改变,这样会使我们的代码难以维护和排错。
如何判断undefined?
-
使用严格相等符(===)或者不相等操作符(!==)来决定一个变量是否拥有值。
不推荐使用标准相等符 -
适应typeof操作符,对未定义的变量检测时只能使用这种方式,不然会报错。
(function() {
var undefined = 'not is undefined';
let data;
if(data === undefined){
console.log('data为undefined')
}else{
console.log('data不为undefined')
}
})()
想一想输出结果是什么?
undefined作为局部变量使用是可以被重写,但是如果我们依旧使用上面的方法去判断data是否为undefined是有风险的。
void运算符
想要准确的判断data是否为undefined,就需要找到原始值undefined:
(function() {
var undefined = 'not is undefined';
console.log(undefined); //"not is undefined"
console.log(typeof undefined) // "string"
let data;
if(data === void 0){
console.log('data为undefined')
}else{
console.log('data不为undefined')
}
})()
(function() {
var undefined = 'not is undefined';
console.log(undefined); //"not is undefined"
console.log(typeof undefined) // "string"
let data;
if(data === window.undefined){
console.log('data为undefined')
}else{
console.log('data不为undefined')
}
})()
总结一下:
- undefined是简单数据类型Undefined的默认值。
- 如果变量未初始化,或者typyof未定义的变量,都会得到undefined。
- 可以使用严格相等于和不相等操作符来判断当前变量是否为undefined;对未定义的变量使用typeof来检测;当把undefined当做局部变量来重写时,判断变量是否为undefined的时候可以使用vido 0或者window.undefined;
这篇笔记来源于:cavszhouyou.top/JavaScript%…
下班时间到,摸鱼到此结束。下一篇写null~~~