课程名称:JavaScript深入浅出
课程章节: 数据类型
课程讲师:Bosn
课程内容:
JavaScript数据类型
:
原始类型:Number
、String
、Boolean
、null
、undefined
对象:Object
隐式转换:
当我们使用字符串和数字进行相加时,这个加号相当于字符串的拼接,如果是减少时,默认将字符串转换为数字进行计算。如果我们想要把一个字符串转换成一个数字,那么就可以减去一个0。如果想要一个变量变成字符换,我们只需要加上一个空的字符串即可。当我们判断运算符左侧和右侧是否相等时,如果运算符是==
,那么就会进行隐式转换从而判断两边是否相等,不会严格要求两边的类型是一样的。如果运算符是====
,那么除了两边隐式转换需要相等,而且两边的类型也要一致,如果类型不一致就会返回false
。
我们定义了一个str
的变量,值为love
,我们再定义一个strObj
变量,值为new String("love")
,我们输出之后发现一个是字符串,一个是对象,里面是将字符串拆分为单个字母。我们输出str
的长度,可以使用str.length
,结果输出的是4。如果我们给str
增加属性,发现不会报错,但是输出时发现值为undefined
。这是因为我们使用str
访问长度时,相当于使用的是new String()
,当使用完成后就会进行销毁,这就是为什么赋值后再访问结果就是undefined
。除了字符串之外还有number
、Boolean
也有这样的特性。
类型检测:
typeof
适合判断函数和基本类型的判断,如果是一个数字,返回的是number
。如果是一个字符串返回的是一个string
。如果是一个函数,返回的是一个function
。如果是undefined
,还是会返回undefined
。如果是new Object()
或者[1, 2]
都会返回object
。其中有两个需要注意就是NaN
返回的是number
,null
返回的是object
。但是如果我们想判断一个对象是否是一个数组,这是无法判断的。
如果我们想要判断对象的话,使用instanceof
来进行判断。如果左侧不是一个对象,那么会直接返回false
,如果右侧不是一个函数或者对象就会报错。instanceof
判断的原理是查看左侧对象的原型链上是否有右侧构造函数的prototype
属性。我们需要注意的是不同window
或iframe
间的对象类型检测不能使用instanceof
。
Object.prototype.toString
常见的几种检测判断:
课程收获:
这一章主要学习了数据类型以及检测方法,其中类型检测总结,typeof
适合基本类型及function
检测,遇到null
失效。instanceof
适合自定义对象,也可以用来检测原生对象,在不同iframe
和window
间检测时失效。我们使用Object.prototype.toString
检测时遇到注意兼容性,在检测null
和undefined
的时候在Ie678
中返回值都是[object Object]
。