小试牛刀

  输出下列数据比较结果

    [] == 0; //==============================================================true
[] == false; //==========================================================true
[] == undefined; //======================================================false
[] == null; //===========================================================false
[] == ''; //=============================================================true 0 == false; //===========================================================true
0 == undefined; //=======================================================false
0 == null; //============================================================false
0 == ''; //==============================================================true false == undefined; //===================================================false
false == null; //========================================================false
false == ''; // =========================================================true
false == 'false'; //=====================================================fasle undefined == null; //====================================================true
undefined == ''; // =====================================================false
undefined == 'undefined'; //=============================================false null == ''; //===========================================================false

  有没有全对呢?If the answer is "yes", congratulations!

两个不同类型数据比较时隐式转换规则

  1)  数字和字符串、布尔类型、数组进行比较时,字符串(或布尔类型、或数组)先转换为数字(Number),再进行比较;数组转数字请参看后文。

    123 == '123asd'; //false
123 == '123'; //true 123 == false; //false
123 == true; //false

  使用 if(num) 和 if(num == true) 结果不一样。前者使用Boolean()转换Num, 后者使用Number转换true。

    var num = 123;
if(num) {
console.log(1); //输出1
}
if(num == true) {
console.log(2); //无输出
} var str = "qwe";
if(str) {
console.log(1); //输出1
}
if(str == true) {
console.log(2); //无输出
}

  

  2) 字符串和布尔类型比较,看完下面的代码我疯了。如果一定要给一个解释,那么一定是进行比较的两个数据同时经过Number()的洗礼后再进行比较。数组和布尔类型的比较也如此。

    "qwe" == false; //false
"qwe" == true; //false
"" == false; // true
"" == true; //false [] == false; //true
[0] ==false; //true
[00] ==false; // true
[0,0] == false ; //false

  3) undefined 除了和null进行非全等比较返回true,其它均返回false。null 除了和 undefined进行非全等比较返回true,其它均返回false。

  4) 数组(或对象)和字符串进行比较时,数组(或对象)会转换成字符串再进行比较。

    [] == ""; //true
[0] == ""; //false
[0] == "0"; //true var obj = {a: 1};
obj == ""; //false
obj == "[object Object]"; //true

Number() 强制转换成数值

  1) 字符串转数值,能解析的返回数值,不能解析的返回NAN(Not a Number)。

    Number('123'); //
Number('123shj'); //NAN
parseInt('123shj'); // 123
   Number('\t\v\r12.34\n'); // 12.34
   parseInt('\t\v\r12.34\n'); // 12

  2) 布尔值转数值

    Number(true); //
Number(false); //

  3) Unfined 转数值

    Number('undefined'); // NAN

  4) null 转数值

    Number(null); //

  5) 对象转数值

    Number({a: 2}); // NAN

   

  

String() 强制转换成字符串

  1) 原始数据类型转换为字符串,相当于直接把原数据用引号包起来。

    String(123); // "123"
String(true); // "true"
String(undefined) // "undefined"
String(null); // "null"

  2) 对象转字符串

 

Boolean() 强制转换成布尔类型

  所有对象转换为Bool类型都为true,只有以下几个数值转换为Bool为false: undefined/null/0/NAN/""。

   undefined == false 返回 false, Boolean(undefined) = false.

   [] == false 返回true,  Boolean([]) = true.

    Boolean(undefined); //false
Boolean(null); //false
Boolean(0); //false
Boolean(NAN); //false
Boolean(""); //false
Boolean([]); //true
Boolean({}); //true
Boolean(new Boolean(false)); // true

结束语

若有不足之处,欢迎指正。

参考地址

[1] 数据类型转换.阮一峰. http://javascript.ruanyifeng.com/grammar/conversion.html

[2] http://www.jb51.net/article/34190.htm

【JS基础】类型转换——不同数据类型比较的更多相关文章

  1. 百万年薪python之路 -- JS基础介绍及数据类型

    JS代码的引入 方式1: <script> alert('兽人永不为奴!') </script> 方式2:外部文件引入 src属性值为js文件路径 <script src ...

  2. JS基础_基本数据类型和引用数据类型

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. js基础-类型转换

    显示类型转换 Number() 将任意类型转换数值类型 true 1 false 0 Number(null) => 0 Number(undefined) => NAN Number(' ...

  4. JS基础——常见的数据类型

    常见的数据类型 原始类型(基本类型)包括 :number.string.boolean.null.undefind 引用类型包括 :object,其中object中又分 Function.Array. ...

  5. JS基础知识(数据类型)

      1,关于typeof   因为是弱类型语言,而程序代码中又不得不定义出变量的类型所提供出来的方法. 返回的结果如下图:   如下例子: var test = "123"; va ...

  6. js基础-数组及数据类型

    数组也是引用类型 构造函数创建数组 Object 构造函数类型(所有类型基类)   Array 构造函数类型 求幂运算符 **   2**32-1 数组容量最大 arry.length 如果减小len ...

  7. js基础--javaScript数据类型你都弄明白了吗?绝对干货

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 数据类型的分类 JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Null.Undefine ...

  8. js 基础数据类型和引用类型 ,深浅拷贝问题,以及内存分配问题

    js 深浅拷贝问题 浅拷贝一般指的是基本类型的复制 深拷贝一般指引用类型的拷贝,把引用类型的值也拷贝出来 举例 h5的sessionStorage只能存放字符串,所以要存储json时就要把json使用 ...

  9. JS基础学习1

    1 JS 概述 一个完整的javascript实现是由以下3个不同部分组成的: (1)     核心(ECMAscript) (2)     文档对象模型(DOM)  Document object ...

  10. 前端面试题目汇总摘录(JS 基础篇)

    JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string typeof null; // o ...

随机推荐

  1. ASP.NET-FineUI开发实践-18

    Grid编辑下垃级联 看了看专业版的例子,分为以下几步,都是前端的 1.编辑父下拉框后,重置子下拉框 2.编辑子下垃框前,通过父下垃框数据得到下垃项,然后绑定数据 所以这里要截取Grid的两个事件,编 ...

  2. tp3.2多个或者并且语句语法

    $map['tid1&cid1'] =array($jmid,'0','_multi'=>true); $map['tid2&cid2'] =array($jmid,'0','_ ...

  3. 绝对路径的表示方式为什么是"/usr"而不是"//usr"

    今天闲逛贴吧,竟然看到有个人问绝对路径的表示方式为什么不是//usr/local而是/usr/local.原文: 我想99%的人都没想过这个问题,都理所当然的认为:它不就是根"/" ...

  4. Docker网络的基本功能操作示例

    一.Docker常用的四种网络模型 1.第一种:使用网络名称空间,但不设置任何网络设备 这种模型中只有lo接口,是一个封闭式的容器,不能与外界进行通信.设置网络模型需要使用 --network 选项来 ...

  5. μC/OS-II 创建一个任务的流程

    1. 声明任务的优先级.任务堆栈的大小及任务函数 #define LED_TASK_PRIO 6 #define LED_STK_SIZE 64 void led_task(void *pdata); ...

  6. html5入门:教你用canvas写一个时钟

    今天的时间比较充裕,心血来潮,为大家分享一个html5的小例子,希望对刚学html5或者是没学html5正准备学的“童鞋们”展示一个小案例,希望对你们的学习有帮助!高手嘛!请跳过吧! 好了,闲话少数, ...

  7. [转]比特币测试链——Testnet介绍

    本文转自:https://blog.csdn.net/wkb342814892/article/details/80796398 testnet使用详解需求需要搭建一个简单的交易测试场景,用于生成可查 ...

  8. 【Tomcat】Tomcat的类加载机制

    在Tomcat中主要有以下几种类加载器:(图片来自网络) tomcat启动时,会创建几种类加载器: 1 Bootstrap 引导类加载器 加载JVM启动所需的类,以及标准扩展类,位于jre/lib/e ...

  9. Integer Partition(hdu4658)2013 Multi-University Training Contest 6 整数拆分二

    Integer Partition Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...

  10. Ubuntu创建新用户的正确姿势

    作者按:因为教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<Ubuntu 创建新用户的正确姿势>原文地址.更欢迎来我的小站看更多原创内容:godbmw.com,进行&q ...