JS中的各种类型转换规则(转)
JS中的类型转换非常恶心,大家都懂的,不过该学还是要学。
今天看犀牛书看到了转换规则,总结出来。
X转字符串、数字、布尔值
X表示各种类型的值,直接上图:
| 值 | 转数字 | 转字符串 | 转布尔值 |
|---|---|---|---|
| undefined | NaN | “undefined” | false |
| null | 0 | “null” | false |
| true | 1 | “true” | |
| false | 0 | “false” | |
| 0 | “0” | false | |
| -0 | “0” | false | |
| NaN | “NaN” | false | |
| Infinity | “Infinity” | true | |
| -Infinity | ”-Infinity” | true | |
| 1(非零) | “1” | true | |
| {}(任意对象) | 见下文 | 见下文 | true |
| [](任意数组) | 0 | ”” | true |
| [9](包含一个数字元素) | 9 | “9” | true |
| [”a”](其他数组) | NaN | 使用.join()方法 | true |
| function(){}(任意函数) | NaN | 见下文 | true |
两个基本方法
上文中有三个“见下文”,就是见这里了。这三个地方也就是JS转换最麻烦的地方。
首先来看两个基本的转换方法:
toString() // 返回对象的字符串表示形式
valueOf() // 返回对象的数字表示形式
乍一看很简单是吧,别着急,关键是JS并不会像你想的那样单纯地调用这些方法。
对象转字符串
具体步骤如下:
- 如果有toString()方法,调用对象的toString()方法,如果返回一个字面量就把这个字面量转换成字符串并返回。字面量转字符串见上表。
- 如果没有toString()方法或者没有返回字面量,并且有valueOf()方法,调用valueOf()方法。如果这个方法返回字面量就转换成字符串返回。
- 如果以上两步都没有成功,就抛出一个类型错误异常。
对象转数字
其实就是把对象转字符串的前两步调换了一下,然后把返回结果都转换成数字。
具体步骤如下:
- 如果有valueOf()方法,调用valueOf()方法。如果这个方法返回字面量就转换成数字返回。
- 如果没有valueOf()方法或者没有返回字面量,并且有toString()方法,调用对象的toString()方法,如果返回一个字面量就把这个字面量转换成数字并返回。字面量转数字见上表。
- 如果以上两步都没有成功,就抛出一个类型错误异常。
对象转字面量
有些特殊的运算符并不会把对象转换成数字或者字符串,而是转换成字面量。
对象转字面量的具体步骤和对象转数字的具体步骤一样,先调用valueOf再调用toString,区别是,对象转字面量并不会在返回之前把结果转换成字符串或者数字,也就是说没有上面步骤中的粗体部分。
那么什么运算符会这么SB呢:
- +
- ==
- !=
- <,>以及所有关系运算符
处理日期类
别着急,JS还有更SB的一种情况,就是处理Date类型。
如果“+”和“==”遇到的是Date类型对象,那就会采用去除粗体部分的对象转字符串步骤,也就是说先调用toString再调用valueOf,并且不会对结果进行类型转换。
总结
普通转换参见表格,+、==、!=、<>和关系运算符的文艺转换参见对象转字面量,+、==遇见Date的2B转换参见处理日期类。
JS中的各种类型转换规则(转)的更多相关文章
- js中的变量类型
js 中输出定义变量的类型 typeof 变量名. var u: --underfined类型 var s = "你是一个好人": --string类型 var n = ...
- JS 中对变量类型的五种判断方法
5种基本数据类型:undefined.null.boolean.unmber.string 复杂数据类型:object. object:array.function.date等 方法一:使用typeo ...
- JS中 typeof,instanceof类型检测方式
在js中的类型检测目前我所知道的是三种方式,分别有它们的应用场景: 1.typeof:主要用于检测基本类型. typeof undefined;//=> undefined typeof 'a' ...
- JS 中对变量类型判断的几种方式
文章整理搬运,出处不详,如有侵犯,请联系~ 数据类型判断和数据类型转换代码工具 在 JS 中,有 5 种基本数据类型和 1 种复杂数据类型,基本数据类型有:Undefined, Null, Boo ...
- js中的基本类型与引用类型学习
一.基本数据类型 ECMAScript 有 5 种原始类型(primitive type),即 Undefined.Null.Boolean.Number 和 String,也称为基本数据类型,ES6 ...
- JS 中对变量类型的判断
总结:1. 一般简单的使用 typeof 或 instanceof 检测(这两种检测的不完全准确) 2. 完全准确的使用 原生js中的 Object.prototype.toStri ...
- js中对象的类型
js中的类型分为三种,"内部对象"."宿主对象"."自定义对象" 1."内部对象"有Date.Function.Arra ...
- jquery ajax中支持哪些返回类型以及js中判断一个类型常用的方法?
1 jquery ajax中支持哪些返回类型在JQuery中,AJAX有三种实现方式:$.ajax() , $.post , $.get(). 预期服务器返回的数据类型.如果不指定,jQuery 将自 ...
- js中判断对象类型的几种方法
我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...
随机推荐
- cordova-sqlite-plugin常用数据库操作
ionic项目需要做本地缓存,研究了一番,总结出了常用的数据库操作: 1.新建数据库,用angularJS+ionic: //声明一个数据库对象 var db = null; //事件devicere ...
- lsof 一切皆文件
Docs » 工具参考篇 » 3. lsof 一切皆文件 Docs » 工具参考篇 » 3. lsof 一切皆文件 Edit on GitHub 3. lsof 一切皆文件¶ lsof(list op ...
- Java 学习第一步-JDK安装和Java环境变量配置
Java学习第一步——JDK安装及Java环境变量配置 [原文] 2014-05-30 9:09 Java SE 阿超 9046 views Java作为当下很主流的编程语言,学习Java的朋 ...
- JQuery-属性
// attr能访问到的都是html里面的样式,诸如内联样式.外部样式和外联样式该方法访问不到 $('#div1').width('400px') // 这个用来改样式css $("#div ...
- NPOI操作excel之读取excel数据
NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 一.下载引用 去NPOI官网http://npoi.codeplex. ...
- [转]java动态代理(JDK和cglib)
转自:http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html java动态代理(JDK和cglib) JAVA的动态代理 代理模式 代理 ...
- iTween研究院之学习笔记Move移动篇
最近项目中需要加入一些模型移动的小动画,学习过程中发现了iTween这个类库.它主要的功能就是处理模型从起始点到结束点之间运动的轨迹.(移动,旋转,音频,路径,摄像机等)它是一个开源 ...
- Python之路-python(面向对象进阶)
一.面向对象高级语法部分 1.静态方法.类方法.属性方法 2.类的特殊方法 3.反射 二.异常处理 三.Socket开发基础 一.面向对象高级语法部分 静态方法(@staticmethod) 定义:只 ...
- 对hashmap与hashcode()、equals()的理解
1.equals方法没被重写的时候 比较的只是对象的地址 重写之后 比较的才是对象里的内容 2.重写equals的时候 务必需要重写hashcode 不然在用到容器的时候 会出现问题 因为容器会 ...
- JDBC增删改查,PreparedStatement和Statement的区别
此篇是在上一篇的基础上使用PreparedStatement对象来实现JDBC增删改查的 具体工具类JDBCTools和实现类和配置文件在上一篇Statement对象实现的时候有写. 上一篇地址htt ...