undefined VS void 0

# 关于 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

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

# 关于 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

扫一扫,微信中打开

微信二维码