One day you will be the one you want to be.

又一天过去了。今天过得怎么样,梦想是不是更远了?

JS数据类型

###JS数据类型
JS是弱类型语言,定义变量时候无需指定类型.
var num = 32;

完后也可以把字符串 赋值给这个变量

1
num = "this is a string";

32 + 32  // 64
“32” + 32  // "3232"
“32” - 32  // 0

JS因为不需要指定类型 ,在一些运算的时候有很多隐式转换

#####先看一下JS数据类型

5种原始类型和一种对象类型
原始类型 (number string boolean null undefined) object 对象(function array date …)

根据不同类型,有一些不同隐式转换方式
对于 a == b
如果类型相同就相当于 === 严格等于
如果类型不同会尝试类型转换
null == undefined 相等

number == string (会尝试把字符串转换成数字 ) // 1 == “1.0” true

boolean == ? (一边是布尔值 不管另一边是什么 首先会把布尔值转换成数字 true转换为1 false 转换为 0)

object == number | string (如果一边是对象另一边是Number 或者string 会尝试把对象转换为基本类型 其他的情况的话就会是false)

在原始类型中 Number string boolean 都有包装对象
比如

var str =”string” 这是一个基本类型 在JS 中当你尝试给这样的类型增加属性时 js会将他转换为包装对象
相当于 new 一个 string 但是 当使用完以后 会被销毁 因为这是一个临时对象

#####类型 检测

typeof  运算符会返回一个字符串  适合函数对象和基本类型
1
typeof 100   // number
typeof true  // boollean
typeof function //function
typeof (undefined)  // undefined
typeof new Object() // object
typeof [1,2]     //object
typeof NAN     // number
typeof null     //object

instanceof 对于判读对象类型 常用的是 instanceof
obj instanceof object
会判断 左边的对象 的原型链上是否有 右边的构造函数的 prototype 属性(任何构造函数都会有一个prototype对象属性 这个对象属性将用作 使用new 构造函数 这种构造方式来构造出对象的原形 )
JS是用引用来判断对象的 在跨iframe 的对象上不能用instanceof

Object.prototype.toString 也可以判断一些类型
比如 Object.prototype.toString.apply([]); === “[object Array]”

constructor 会指向构造这个对象的 构造函数 (constructor可以被改写)

typeof 适合基本类型以及Function 遇到null 失效 会返回object 可以用 === 来判断是否等于 null