1、首先看一个判断题:null和undefined 是否相等
console.log(null==undefined) //true
console.log(null===undefined) //false
console.log(typeof null) // "object"
console.log(typeof undefined) // "undefined"
观察可以发现:null 和 undefined 两者相等,但是当两者做全等比较时,两者又不等。
原因:
- null: object类型,代表“空值”,代表一个空对象指针。
- undefined: undefined类型。
2、null 和 undefined 的区别
null表示"没有对象",即该处不应该有值。典型用法是:
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。
undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:
(1)变量被声明了,但没有赋值时,就等于 undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于 undefined。
(3)对象没有赋值的属性,该属性的值为 undefined。
(4)函数没有返回值时或者 return 后面什么也没有,返回 undefined。
3、JS 中 typeof 与 instanceof 的区别
(1)typeof 可用来获取检测变量的数据类型
用法:
使用形式如下两种方式,operand是表达式(括号可选可不选)
typeof operand
or
typeof (operand)
- typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。
- 它的返回值是一个字符串,该字符串说明运算数的类型。(typeof 运算符返回一个用来表示表达式的数据类型的字符串。 )
- typeof 其实就是判断参数是什么类型的实例,就一个参数。
- typeof 一般只能返回如下几个结果:
"number"、"string"、"boolean"、"object"、"function" 和 "undefined"
。
console.log(typeof (123)); // "number"
console.log(typeof ("abc")); // "string"
console.log(typeof true); // "boolean"
console.log(typeof (function () { })); // "function"
console.log(typeof []); // "object"
console.log(typeof {}); // "object"
console.log(typeof null); // "object"
console.log(typeof undefined); // "undefined"
在 JavaScript 中,判断一个变量的类型常常会用 typeof 运算符,在使用 typeof 运算符时判断引用类型存储值时会出现一个问题,无论引用的是什么类型的对象,它都返回 “object”
。这就需要用到 instanceof 来检测某个对象是不是另一个对象的实例。
(2)instanceof
用法:
object instanceof constructor
例:
var a = [];
a instanceof Array
- instanceof 用于判断一个变量是否某个对象的实例
- instanceof 的返回值是 bool 类型
console.log([] instanceof Array); // true
console.log([] instanceof Object); // true
console.log({} instanceof Object); // true
console.log({} instanceof Function); // false
console.log(function () { } instanceof Object); // true
console.log(function () { } instanceof Function); // true
console.log(Object instanceof Function); // true
console.log(Function instanceof Object); // true
(3)使用场景
- typeof 主要用来返回目标表达式的的数据类型。
- instanceof 主要用于判断一个对象是否是一个实例的原型。
4、一些常见的案例
(1)typeof 1==1
,输出是什么? false
console.log(typeof 1 == 1) // false
// 等价于
// let a = typeof 1; // a = "number";
// a == 1
(2)强制类型转换
Boolean(value)
——把给定的值转换成Boolean型;Number(value)
——把给定的值转换成数字(可以是整数或浮点数);String(value)
——把给定的值转换成字符串。
1)Boolean(value)——把给定的值转换成Boolean型
- 代表空、否定的值会被转换为 false ,如
''、0、NaN、null、undefined
。 - 其余值都会被转换为 true。
console.log(Boolean(0)); // false
console.log(Boolean(1)); // true
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
console.log(Boolean([])); // true
console.log(Boolean({})); // true
console.log(Boolean(NaN)); // false
console.log(Boolean('abc')); // true
console.log(Boolean('')); // false
console.log(Boolean(123)); // true
console.log(Number(false)); // 0
console.log(Number(true)); // 1
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
console.log(Number({})); // NaN
console.log(Number([])); // 0
console.log(Number('abc')); // NaN
console.log(Number(NaN)); // NaN
console.log(Number(100)); // 100
console.log(Number("5.5 ")); // 5.5
console.log(Number(" 56 ")); // 56
console.log(Number("5.6.7 ")); // NaN
console.log(String(1)); // "1"
console.log(String(null)); // "null"
console.log(String(undefined)); // "undefined"
console.log(String(NaN)); // "NaN"
console.log(String([])); // ""
console.log(String([1, 2, 3])); // "1,2,3"
console.log(String({})); // "[object Object]"
console.log(String({ "a": 1, "b": 2, "c": 3 })); // "[object Object]"
(3)例子
布尔类型有两个值:true 和 false ,其中 true 表示真(对),而 false 表示假(错)。
布尔型和数字型相加的时候, true 的值为 1 ,false 的值为 0。
console.log(null == undefined); // true
console.log(null === undefined); // false
console.log(0 == null); // false
console.log('0' == null); // false
console.log('0' == NaN); // false
console.log(NaN == NaN); // false
console.log(null == null); // true
console.log(null === null); // true
console.log(undefined == undefined); // true
console.log(undefined === undefined); // true
console.log(1 + {}); // "1[object Object]"
console.log(1 + []); // "1"
console.log(1 - {}); // NaN
console.log(1 - []); // 1
console.log(1 + null); // 1
console.log(1 - null); // 1
console.log(1 + undefined); // NaN
console.log(1 - undefined); // NaN
console.log(1 + NaN); // NaN
console.log(1 - NaN); // NaN