2

数据类型、定义

首先,从本质来看,他们是两种不同的JavaScript数据类型。直接上《JavaScript高级程序设计》里的解释好了。
Undefined类型:Undefined类型只有一个值,即特殊的undefined。在使用var 声明变量但未对其加以初始化时,这个变量的值就是undefined。
Null类型:Null类型也只有一个特殊的值——null。从逻辑角度来看,null值表示一个空对象指针。

运算符或者函数操作结果

alert
a:声明但未定义(undefined)
b:声明且定义为null
c:未声明

clipboard.png

typeof
a:声明但未定义(undefined)
b:声明且定义为null(表示定义的变量将来用于保存对象)
c:未声明(对于尚未声明过的变量,只能执行一项操作,就是用typeof检测其数据类型)

clipboard.png

instanceof
a:定义为undefined
b:定义为null

clipboard.png

转换成布尔值

用 !逻辑非运算符,undefined和null会自动转换成布尔值false,但是直接用==则会失效。

clipboard.png

两者之间比较 == && ===

== 运算符比较:在对比不同类型时先做数据类型转换,转换后比较两个变量的值
===运算符比较:比较两个数据的数据类型以及值

clipboard.png

题外(内?)话——typeof和instanceof之间的区别

typeof:是运算符,不是函数,用于检测变量的数据类型。返回的是一个字符串。
使用方法eg. Typeof(“string”) 其中括号可加可不加
typeof返回的值有:undefined, string, boolean, number, object, function

clipboard.png

分析一下上图的两个结果:
typeof 1: 1就是一个数字类型的常量,故结果为”number”;
new Number(1) 创建一个Number类型的对象,值为1,故结果为”object”

instanceof用于判断一个变量是否是某个对象(类)的实例。返回的是布尔类型。
在控制台做了如下两行代码的测试,最先试的其实是第二行代码,输出false的时候我还有有些惊讶的,a不是赋值1了嘛,怎么是false呢?于是我又仔细读了一下instanceof的定义,对象,类,1根本就是一个常量嘛,跟对象的实例根本不挨边。(结合Java的OOP相关知识,理解很多)
instanceof返回的值有:true false

clipboard.png


青草怪味豆
95 声望4 粉丝

Practice Makes Perfect!