每天一点练习题(6) -------unll,undefined,undeclared(defind)

例行写点没有的话,最近也在做面试官。心里会有感觉,在面试的时候把问题回的精彩了可能只需要几个问题就能通过面试,如果被问的特别广的时候肯定是看看是不是可以拿到更高的薪资。所以像标题这种很基础的面试题更应该答精彩,就像搞对象不就是从相互吸引开始?
另外如果这个问题写到最后篇幅不长会把JS判断数据类型的方法加上,它们也是有关系的。

用typeof的判断

在这里插入图片描述

转数字

在这里插入图片描述
null在进行数字运算时可以转换成0,而undefined会被转换成NaN
用typeof检测null会返回object对象类型 但是
在这里插入图片描述

var a = undefined;
// 或者
var a = null;

上面代码中,a变量分别被赋值为undefined和null,这两种写法的效果几乎等价。
在if语句中,它们都会被自动转为false,相等运算符(==)甚至直接报告两者相等。

if (!undefined) {
  console.log('undefined is false');
}
// undefined is false
if (!null) {
  console.log('null is false');
}
// null is false
undefined == null
// true

上面代码说明,两者的行为是何等相似!Google公司开发的JavaScript语言的替代品Dart语言,就明确规定只有null,没有undefined!
既然含义与用法都差不多,为什么要同时设置两个这样的值,这不是无端增加复杂度,令初学者困扰吗?这与历史原因有关。
1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示"无"的值。根据C语言的传统,null被设计成可以自动转为0。

但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。首先,null像在Java里一样,被当成一个对象。但是,JavaScript的值分成原始类型和合成类型两大类,Brendan Eich觉得表示"无"的值最好不是对象。其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误。

因此,Brendan Eich又设计了一个undefined。他是这样区分的:null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。

    Number(null) // 0
    5 + null // 5
    Number(undefined) // NaN
	5 + undefined // NaN

但是,这样的区分在实践中很快就被证明不可行。目前null和undefined基本是同义的,只有一些细微的差别。
null的特殊之处在于,JavaScript把它包含在对象类型(object)之中。
这并不是说null的数据类型就是对象,而是JavaScript早期部署中的一个约定俗成,其实不完全正确,后来再想改已经太晚了,会破坏现存代码,所以一直保留至今。
注意,JavaScript的标识名区分大小写,所以undefined和null不同于Undefined和Null(或者其他仅仅大小写不同的词形),后者只是普通的变量名。

所以在回答这类问题时,首先说出它们在typeof判断和number转换中的结果,在用简单的话语说明在设计时的意义(如:null表示"没有对象",即该处不应该有值,而undefined是设置了变量但变量持有的值未定义)。当然如果能说出指针指向问题(如:null作为对象原型链的终点undefined是指针所指变量的持有值返回)甚至左右查询问题会更加分(单独会开个帖子说)。但是说不明白一定不要多说。。。。。而且这确实就是很简单的东西

那什么是undeclared?

还没有在作用域中声明过的变量,是undeclared的
如:

let a;
a;     //undefined
b;     //referenceError: b is not defined

对于undeclared(或者not defined)变量, typeof照样返回"undefined"。这是因为typeof有一个特殊的安全防范机制(因为多个脚本文件会在共享的全局命名空间中加载变量)。

发布了38 篇原创文章 · 获赞 1 · 访问量 557

猜你喜欢

转载自blog.csdn.net/weixin_43718291/article/details/103288494