一. 概览
void是一个操作符,用于将任何表达式转换为undefined。它的语法如下:
void expression
例如,void(0)将返回undefined。
undefined是一个全局变量,表示未定义或未赋值,可以被覆盖。如果变量声明了但未初始化,则该变量的默认值为undefined。在函数中,如果您已声明但未返回任何值,则默认返回undefined。
null是一个表示无值或空值的JavaScript原始值,与未定义和未赋值的区别。null意味着对象不包含任何值。如果要显式设置变量或属性不含任何值,可以将其设置为null。
它们在应用上有很多差异。例如,当检查变量是否被定义或初始化时,通常使用undefined。当将变量或属性显式设置为空时,通常使用null。而在某些情况下,使用void来避免不必要的返回值或防止用户单击链接后跳转到新页面。
二. void和undefined
void 后面接任何数据 返回都是undefined
undefined
- 可以作为一种类型
- 类型为undefined的值
- undefined可以作为js变量
- window.undefined只读(IE7/8是可写的)
function test() {
let undefined = 3;
return undefined
}
console.log(test()) // 3
可以用void代替
function test() {
let undefined = 3;
return void(0)
}
console.log(test())
三、undefined和null在ts中使用
- undefined
直接赋值
let x = undefined;
x =1
此时x推断成any类型
let x:undefined = undefined
x=3
编译报错:不能将类型“3”分配给类型“undefined”
undefined的本质是一个变量定义但是没有赋值,如果let x:undefined = undefined这种方式赋值之后,就不能赋值成其它类型。
void使用也是如此
let x:undefined = void(0)
x=3
同样地 let x:null = null也是对类型进行了限制,就不能赋值其它类型
上述例子总结:
- x是any类型,是因为undefined是js类型中默认的空值占位符;
- 如果类型推断为unddefined类型,会使后续赋值类型不匹配;
- ts环境不可能将undefined或者null直接赋值。