JavaScript/TypeScript里undefined, null 和 空字符串''/""的区别

举报
gentle_zhou 发表于 2022/03/09 15:55:50 2022/03/09
【摘要】 在JavaScript/TypeScript项目中,`undefined`和`null`的值都表示无,`undefined`表示不存在定义,`null`表示定义为空值的一个值;空字符串`''/""`则表示是一个长度为0的字符串。

在JavaScript/TypeScript项目中,undefinednull的值都表示无,undefined表示不存在定义,null表示定义为空值的一个值;空字符串''/""则表示是一个长度为0的字符串。

1. undefined

在JS中,undefined表示不存在定义,即是一个“不存在”的成员(和Java等静态类型语言不同,JS/TS作为动态类型语言,存不存在只能在运行期才知道)。

常见的使用情况有:

  1. 变量已被声明了,但还没有被赋值:let name; // undefined
  2. 调用一个有参数的函数,但参数没有提供:
    function addAge(years:number){XXXX};
    addAge(); // undefined
  3. 函数没有返回值时,默认返回undefined:
    const name = getName(); //无返回值,name是undefined
  4. 对象没有赋值的属性的时候,该属性的值为undefined:
    var obj = new Object();
    obj.job; // undefined
  5. 判断一个变量是否存在:
    name === undefined;

如果我们用typeof()去看undefined的类型,我们会发现返回的结果就是undefined:
typeof undefined; // 返回undefined

2. null

null则表示有一个值被定义了,且定义为空值。即可以这么理解,有这么一个概念在,但没有实际的值。

所以设置一个值为null是合理的,比如说:obj.val = null;,即obj.val这个值是空值;但如果设置为undefined,就不合理了。

还有一点可以说明null就代表定义为空值,即如果我们用null和任何数字A进行算术转换时,null都代表0,会返回A的值(我们这里以9为例):let res = 9 + null; // res的值就是9。反之,如果我们用undefined和任何数字进行算术转换,则会返回NaN(Not a Number)的结果:let res = 6 + undefined; //res会输出NaN

如果我们用typeof()去看null的类型,我们会发现返回的结果是objecttypeof null; // 返回object

注意1:nullundefined的值是相等的,但类型不同:

null == undefined            // true
null === undefined           // false

注意2:JavaScript/TypeScript本身是不会将变量设为null的;null是用来让程序员表明某个变量是没有值的。

3. ''/""

空字符串会指向一个对象(会分配内存空间),代表一个长度为0的字符串。

如果我们用typeof()去看空字符串的类型,我们会发现返回的结果是stringtypeof "test string"; // 返回string

如果我们用值为数字的''/""和任何数字进行算术转换,会返回数字本身+字符串代表的值的和作为结果:let res = 6 + "3"; //res会输出9

参考资料

  1. https://wangdoc.com/javascript/types/null-undefined-boolean.html
  2. https://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html
  3. https://stackoverflow.com/questions/5076944/what-is-the-difference-between-null-and-undefined-in-javascript
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。