js的类型转换

javascript的原始类型(primitive type)

有5种primitive type,分别是Undefined、Null、Boolean、Number 和 String。
Null类型:      null类型也只有一个值,即null。undefined实际上是从null派生而来的,因此ECMAScript把他们定义为相等的。     
alert(null == undefined); //output "true"
alert(null === undefined); //output "false"
==时它会自动转化为null,所以返回true。不过如果用严格比较符===,不发生转化,将返回false。    
尽管两个值相等,但是他们的含义却不一样,undefined是声明了变量但为对其初始化时赋予该变量的值,null则用于表示尚未存在的对象。如果函数要返回的是对象,那么找不到该对象时,返回的通常是null。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

js七种数据类型:Sting  Object  null  undefined  Array  Boolean  Number
js五种基本类型:String Boolean Number null undefined
typeof六种返回格式:'string'  'number'  'object'  'function'  'boolean'  'undefined'

不像我们在学习JAVA时,被告知JAVA是完全OOP的语言:class是一类具有共同特点的物体的抽象,object是某个class下具体的一个实现,Object类是所有类的顶层父类,对Java的认知是从类与对象开始的;Javascript则不然,它是从类型(type)开始,在各类语言中遇到的number,string, boolean, object, function,array等都属于类型。

   这些类型在JS中分为两大类:原生类型与对象类型,原生类型包括:number,string, bool, null, undefined;剩下的非原生类型对象都属于对象类型,包括:object, array, function等,那这里的object专指具有属性(attribute)的对象,在Firebug中的代码示例如下:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

转 boolean 规则:

null, undefined, "", 0, -0, NaN 转换成布尔值是false, 剩下的全转化 true;

转 number 规则:

string  '2.3.1' => NaN;

null, '', false, [] ==>> 0;

undefined => NaN;

object => x    Number(object.toString())

隐式类型转换 ==

1、有布尔值则转换为数值

2、字符串数值,则字符串转换为数值

3、只有一个是对象,则toString() valueOf()

4、null == undefined

5、NaN != NaN

6、对象==,比较内存地址

在逻辑运算表达式中,非布尔值会进行转换为布尔值。算上false一共有6个值(false,""(空字符串)、0和NAN、null、undefined)会转化为false.称这6个值为falsy值: 

特别注意的是typeof('0')=='string',即'0'是一个字符串对象,对对象进行逻辑运算结果为true

数据类型 转换为true的值 转换为false的值
Boolean true false
String  任何非空字符串 空字符串
Number 任何非零数字值(包括无穷大) 0和Null
Object 任何对象 null
Undefined   Undefined



console.log(([])?true:false); 
console.log(([]==false?true:false)); 
console.log(({}==false)?true:false
得到的结果分别是什么?()//true true false

第一个([])布尔转换成true.
第二个,==相等比较时,允许类型转换。 其他类型值和布尔值==比较时,先将布尔值强制转换为对应数字,再进行比较。所以([]==false)-->([]==0)
[]和数字==比较时,将[]转数字0,因此([]==false)-->([]==0)--->(0==0)---->true
第三个同上,{}==false--->{}==0-->NaN==0-->false
原文地址:https://www.cnblogs.com/aixiuxiu/p/6541826.html