doubleyong
管理员
管理员
  • 最后登录2021-06-18
  • 发帖数1013
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:268回复:0

[es 6]你不知道的undefined?

楼主#
更多 发布于:2021-06-02 11:09
面试时,经常会被问到
  
       对undefined的理解?


本文, 针对undefined做了超详细的总结 ,请仔细看哦~~


1、undefined 即是一个原始数据类型,也是一个原始值。


2、undefined  是全局对象上的一个属性 window.undefined。

console.log( window.undefined );
// undefined


3、不可写    writable: false

window.undefined = 123;
console.log( undefined );
// undefined



4、不可配置    configurable: false


delete window.undefined;
console.log( undefined );
// undefined



5、不可枚举   enumerable: false

for( var k in window) {
   if( k === undefined) {
       cosole.log( k );
   }
}
// 没有输出



6、不可重新定义:

Object.definProperty(window, 'undefined', {
   writable: true,
   enumberable: true,
   configurable: true
})
// 结果报错


7、系统会给未赋值的变量自动赋值为:undefined

var a;
console.log( a );
// undefined



8、函数没有返回值的时候,系统会自动给函数返回:undefined

function a () {
   console.warn('123')
}
console.log( a() );
// undefined



9、全局作用域下:window.undefined 不可写,但是局部作用域下可以重新赋值。

var undefined = 1;  //相当于给window.undefined赋值
console.log( undefined );
// undefined ,因window.undefined不可写,所以改不了
function test() {
   var undefined = 1;
   console.log( undefined )
}
test();
// 1 原因在于,undefined并不是js的关键字。

因,undefined不是js的关键字,所以在局部作用域中,可以使用undefined做为变量名。


10. 如何判断是undefined

判断是否为 undefined ,使用全等 ===
var a;
if(a===nudefined){
console.log(true);
}else{
console.log(false)
}
// true

为什么不使用 == ,防止判断出现错

var a=null;
if(a==nudefined){
console.log(true);
}else{
console.log(false)
}
//结果也为true

为防止这种情况,所以,最好使用全等

由于在局部作用域中,undefined可以作为变量名重新赋值,所以我们在局部作用域中使用 undefined这个值时,最好用 void(0) 或者 window.undefined 代替。

void(0) 是直接返回一个undefined值,效率还要优先于 window.undefined 的查找。


11、未定义变量,typeof 也会输出undefined,不会报错

typeof
var a ;
console.log(typeof a) ; //undefined;
console.log(typeof b); //undefined

因为typeof 进行了处理. 故未定义变量也不会出错,而是返回undefined

但若单独打印 console.log(b) 是会报错.


VM402:1 Uncaught ReferenceError: b is not defined

    at <anonymous>:1:13




12、判断a 是否申明, 使用 in 关键字

var a;
if('a' in window){
  console.log(true)
}else {
  console.log(false)
}


13、void关键字

void(0) : 对0进行求值 返回undefined

注:void返回的结果,都是undefined

void的使用

   赋值undefined

var a,b,c;
a= void(b=1,c=2);
console.log(a,b,c)
//undefined 1 2

   阻止跳转

&lt;a href = "javascript:void(0)" /&gt;

另注:

console.log( void(0) === window.undefined );

结果为true;


示例:

function test(){
  var undefined =1;
  console.log(undefined); //1
  console.log(void(0)); //undefined
  console.log(undefined === void(0)); //false
  console.log(window.undefined===void(0)); //true
}
test();

void(0) 与window.undefined相比,void(0)效率更高些

现在,代码相对比较规范,所以void(0)出现会比较少。但底层代码还是会有所使用

最后,还是希望大家代码规范为防止有人用undefined做变量,可以使用void(0)代替,void(1),void(100)也可以,要不然就是window.undefined




苟有恒 , 何必三更眠五更起

关注我,一起学习吧

鼓励一下,赐个赞 和 在看

图片:vx.png


知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号