【JS基础】类型转换——不同数据类型比较
小试牛刀
输出下列数据比较结果
[] == 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基础】类型转换——不同数据类型比较的更多相关文章
- 百万年薪python之路 -- JS基础介绍及数据类型
JS代码的引入 方式1: <script> alert('兽人永不为奴!') </script> 方式2:外部文件引入 src属性值为js文件路径 <script src ...
- JS基础_基本数据类型和引用数据类型
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- js基础-类型转换
显示类型转换 Number() 将任意类型转换数值类型 true 1 false 0 Number(null) => 0 Number(undefined) => NAN Number(' ...
- JS基础——常见的数据类型
常见的数据类型 原始类型(基本类型)包括 :number.string.boolean.null.undefind 引用类型包括 :object,其中object中又分 Function.Array. ...
- JS基础知识(数据类型)
1,关于typeof 因为是弱类型语言,而程序代码中又不得不定义出变量的类型所提供出来的方法. 返回的结果如下图: 如下例子: var test = "123"; va ...
- js基础-数组及数据类型
数组也是引用类型 构造函数创建数组 Object 构造函数类型(所有类型基类) Array 构造函数类型 求幂运算符 ** 2**32-1 数组容量最大 arry.length 如果减小len ...
- js基础--javaScript数据类型你都弄明白了吗?绝对干货
欢迎访问我的个人博客:http://www.xiaolongwu.cn 数据类型的分类 JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Null.Undefine ...
- js 基础数据类型和引用类型 ,深浅拷贝问题,以及内存分配问题
js 深浅拷贝问题 浅拷贝一般指的是基本类型的复制 深拷贝一般指引用类型的拷贝,把引用类型的值也拷贝出来 举例 h5的sessionStorage只能存放字符串,所以要存储json时就要把json使用 ...
- JS基础学习1
1 JS 概述 一个完整的javascript实现是由以下3个不同部分组成的: (1) 核心(ECMAscript) (2) 文档对象模型(DOM) Document object ...
- 前端面试题目汇总摘录(JS 基础篇)
JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string typeof null; // o ...
随机推荐
- 【云服务器部署】---Linux下安装nginx
[云服务器部署]---Linux下安装nginx 之前两篇,分别讲了:Linux下安装MySQL 和 springboot项目部署云服务器 nginx安装也是挺简单的.具体步骤如下: 第一步,下载 ...
- Spring boot @EnableScheduling 和 @Scheduled 注解使用例子
前言 Spring Boot提供了@EnableScheduling和@Scheduled注解,用于支持定时任务的执行,那么接下来就让我们学习下如何使用吧: 假设我们需要每隔10秒执行一个任务,那么我 ...
- Spring IOC分析
前言 关于Spring,我想无需做太多的解释了.每个Java程序猿应该都使用过他.Spring的ioc和aop极大的方便了我们的开发,但是Spring又有着不好的一面,为了符合开闭原则,Spring的 ...
- bootbox.js官方文档
简介 Bootbox.js是一个小型的JavaScript库,基于Bootstrap模态框开发,用于创建可编程的对话框. 不像原生的alert等对话框,所有的Bootstrap模态框生成的都是非阻塞事 ...
- Spring Boot 系列(六)web开发-Spring Boot 热部署
Spring Boot 热部署 实际开发中,修改某个页面数据或逻辑功能都需要重启应用.这无形中降低了开发效率,所以使用热部署是十分必要的. 什么是热部署? 应用启动后会把编译好的Class文件加载的虚 ...
- ClickHouse之clickhouse-local
一直在慢慢的摸索clickhouse,之前是用rpm包安装的,没有发现clickhouse-local,最近在centos上面编译成功以后发现多了clickhouse-local,那么这个玩意是什么鬼 ...
- RNN入门(一)识别MNIST数据集
RNN介绍 在读本文之前,读者应该对全连接神经网络(Fully Connected Neural Network, FCNN)和卷积神经网络( Convolutional Neural Netwo ...
- c#源码如何生成托管代码块
1.使用编程语言编写源码--->编程语言的编译器(面向Clr)---->生成IL代码和元数据(包含:代码中声名的类和成员 以及所引用的成员) 2.IL就被称之为托管代码,因为有Clr管理者 ...
- [nodejs] nodejs开发个人博客(一)准备工作
前言 nodejs是运行在服务端的js,基于google的v8引擎.个人博客系统包含对数据库的增删查改,功能齐备,并且业务逻辑比较简单,是很多后台程序员为了检测学习成果,最先拿来练手的小网站程序.我也 ...
- MyISAM和InnoDB区别详解
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然性能极佳,但却有一个缺点 ...