当前位置: 首页 > news >正文

null和undefined的区别有哪些?

null和undefined的区别有哪些?

  • 相同点
  • 不同点
    • undefined
    • null
  • 总结


相同点

1.null和undefined都是js的基本数据类型
2.undefined和null都是假值(falsy),都能作为条件进行判断,所以在绝大多数情况下两者在使用上没有区别

if(undefined){console.log('真的');
}else{console.log('假的');  //执行
}if(null){console.log('真的');
}else{console.log('假的');  //执行
}

当我们对两者进行比较的时候

//松散比较(loose equality)
console.log(null == undefined); //true//严格比较(strict equality)
console.log(null === undefined); //false

不同点

undefined

undefined代表的含义是未定义,一般声明了还没有定义的时候返回undefined, undefined 在 JavaScript
中不是一个保留字,这意味着可以使用 undefined 来作为一个变量名,但是这样的做法是非常危险的,它会影响对 undefined值的判断。我们可以通过一些方法获得安全的 undefined 值,比如说 void 0。

什么情况会出现undefined

//a并未定义过
console.log(typeof a);  //"undefined"
//注意,这里只能使用typeof,直接使用a会造成报错
console.log(a);  //Uncaught ReferenceError: a is not defined
//定义但未赋值
let a;
console.log(a);  //undefined
let a=undefined;
console.log(a); //undefined
//1-参数
function blueFn(a, b) {console.log(a, b);
}blueFn(12);  //12, undefined——因为b没有传值,所以是undefined
const blue={age: 18, gender: 'male'};console.log(blue.height); //undefined——因为就没有叫height的东西

简单来说大致有五种情况

1.真的是没定义(仅typeof可用)
2.定义了但没赋值
3.直接赋值或返回undefined
4.没有对函数的参数进行赋值
5.没有对应属性

null

null代表的是一个空对象,null主要用于赋值给一些可能会返回对象的变量,作为初始化。
什么情况会出现null

let name = null;
console.log(name);  //null
function fn1(a) {console.log(a);
}
fn1(null); //null
const person={name: 'blue', age: null};
console.log(person1.age); //null

总结

null是一个普通值,需要主动使用,只有主动使用时,null才会出现,没有声明null不会自己蹦出来
undefined是一个特殊值,是js中最后的备选方案,当我们向js要求一个“不存在的东西”时,会得到undefined(例如:没赋值的变量、没return的函数、没传的参数)

null本质上是个零,undefined本质上是个特殊对象,null可以和Number类型进行加减乘除,也可以进行比较

Number(null); //0
Number(undefined); //NaN12+null; //12
12+undefined; //NaN//跟数字比较会更加明显
-5<null; //true——null是0,-5<0-5<undefined;  //false
-5>undefined;  //false
-5==undefined; //false
//undefined就不是数字,跟数字没有可比性

解构赋值与undefined、null

const [a=1,b=2]=[undefined, null];//undefined就是没给——触发默认值
console.log(a);  //1//null是给了,但是空——不触发默认值
console.log(b);  //null
http://www.lryc.cn/news/23125.html

相关文章:

  • 【强烈建议收藏:计算机网络面试专题:HTTP协议、HTTP请求报文和响应报文、HTTP请求报文常用字段、HTTP请求方法、HTTP响应码】
  • 关于Java中的静态块讲解
  • ledcode【用队列实现栈】
  • 【基础算法】双指针----字符串删减
  • Billu靶场黑盒盲打——思路和详解
  • 【2363. 合并相似的物品】
  • 【C++提高编程】C++全栈体系(二十四)
  • c++11 标准模板(STL)(std::unordered_set)(十一)
  • AI/CV大厂笔试LeetCode高频考题之基础核心知识点
  • 华为OD机试题,用 Java 解【静态扫描最优成本】问题
  • 常见无线技术方案介绍
  • 收获满满的2022年
  • react的生命周期
  • scanpy 单细胞分析API接口使用案例
  • 【Vue3 第二十一章】Teleport组件传送
  • 在 Windows Subsystem for Linux (WSL2) 的 Ubuntu 系统上配置 Vulkan 开发环境
  • 放苹果HJ61
  • Windows下,OPC UA移植,open62541移植
  • 【Tomcat与Servlet篇1】认识Tomcat与Maven
  • C++类和对象:拷贝构造函数和运算符重载
  • 【IntelliJ IDEA】idea plugins搜索不出来,如何找到插件的解决方案
  • 移动端自动化测试(一)appium环境搭建
  • 5 逻辑回归及Python实现
  • 技术干货 | Modelica建模秘籍之状态变量
  • LeetCode 2574. 左右元素和的差值
  • rollup环境配置
  • 二分查找与二分答案、递推与递归、双指针、并查集和单调队列
  • 如何进行域名购买,获取免费ssl证书,使用springboot绑定ssl证书
  • LabVIEW网络服务安全2
  • java动态代理