一、数据类型
(一)、六种数据类型
原始类型: object number string boolean null undefined
object对象:
Function Array Date
(二)、隐式转换
1、== 和 ===
1.1 ==
"1.23" == 1.23
0 == false
null == undefined
new Object() == new Object()
[1,2] == [2,1]
boolean == ?
1.2 === 严格等于
a === b 类型和值都必须相同
但是 NaN != NaN Not a Number
(三)、包装对象
var str = "hello"; //基本类型
var strObj = new String("hello"); //对象类型(包装类型)
//当基本类型使用对应包装类型的方法时,js会智能创建一个对应的包装类型副本,使用结束后销毁
str.length; //原则上str基本string类型,不能有属性,但是此时创建了一个包装类型的副本
alert(str.length); //得到6
str.t = 3; //按照对象为其创建属性
alert(str.t); //得到undefined
(四)、类型检测
1.typeof
返回一个字符串,
适合函数对象和基本类型的判断
typeof 100 "number"
typeof true "boolean"
typeof function "function"
typeof undefined "undefined"
typeof new Object "object"
typeof [1,2] "object"
typeof NaN "number"
typeof null "object" ?????? null为一个基本类型,但是由于历史原因返回object
2.instanceof 适合自定义对象
[1,2] instanceof Array true
new Object() instanceof Array false
//不同windows或iframe之间的对象类型检测
不能使用instanceof
3.Object.prototype.toString 适合内置对象和基本类型 遇到null 和 undefined失效
Object.prototype.toString.apply([]); === "[object Array]"
Object.prototype.toString.apply(function(){}) === "[object Function]"
Object.prototype.toString.apply(null) === "[object Null]" ??????
Object.prototype.toString.apply(undefined) === "[object Undefined]"
4.construtor //构造器、构造函数
5.duck type