# 关于 undefined
undefined是全局对象(window)一个属性
undefined是一个特殊类型
其值只有一个就是undefined(非字符串)
window.undefined // 特殊值undefined 而非字符串
typeof window.undefined // 类型:'undefined' (typeof 类型判断返回值都是string)
'undefined' in window // true
window.hasOwnProperty('undefined') // true
window.undefined === undefined // true
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
undefined并非保留字
可以被用作变量(function是保留字用途变量报错)
可以被重写
导致返回值并非你想要的undefined特殊值
var undefined = 10
console.log(undefined) // & ie8- 则是10
console.log(undefined) // ie9+ 及 非IE浏览器 undefined 为什么在现在浏览器中不被重写:因为现代浏览器把它作为*全局对象*的只读属性
// 函数中现在浏览器重写赋值依然是有效的,因为全局对象中undefined是只读的
(function() {
var undefined = 100
console.log(undefined) // 100 现在浏览器中是100
})()
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 关于 void
# 什么是void
是一个运算符
void() = void
对void的表达式求值,始终返回undefined
// 会报错的
function fn () {
console.log(1)
}()
// 加个void 将function关键字识别成函数表达式而不是函数声明(语句)
// 正常执行了
void function fn () {
console.log(1)
}()
# viod 0 优势
不可以被重写,只返回undefined特殊值
字符更短,节省字节大小
一些压缩工具会将undefined转换为void 0,如果直接写void 0 会加快压缩
# 小结
用到 undefined
特殊值的地方
使用 void 0
替换 undefined
扫一扫,微信中打开