JAVASCRIPT学习笔记之强制类型转换
最近在读《你不知道的javascript》系列图书,收获蛮大,感慨也挺多的。
是的,关于javascript,你不是不知道,而是真的不知道。
就比如类型转换,从开始到看完到第二第三第N遍,我经历了如下的心路历程:
这有什么不知道的 → 一脸懵逼 → 有点意思 → 卧槽,怎么这样? → 原来是这样 → 靠,还是坑...
真可谓是不学不知道,一学吓一跳。
为了避免再次入坑,这里做个总结,不,了结。
Javascript中的强制类型转换总是返回标量基本类型值(string, boolean, number, undefined, null)。
直白点就是toString()或者valueOf()的返回值。
var a = 1; a.toString() // 1 a.valueOf() // 1 a + 2 // 3 优先调用valueOf a + string // 1string 优先调用toString a + //隐式强制类型转换 String(a) //显示强制类型转换ToString 字符串化
对象在强制转换为字符串的时候,会优先调用toString()方法,如果返回基本类型的值,则直接使用该返回值;
如果返回值不是基本类型,则会继续调用valueOf()方法,如果valueOf()返回基本类型的值,则直接使用该返回值,否则报错。
数组默认的toString方法经过了重新定义,类似于数组的join(,)方法,会将数组的各个元素以,分隔返回。这就是String([]) === 的原因。
字符串、数字、布尔、null的JSON.stringify的规则与ToString相同 如果传递给JSON.stringify的对象中定义了toJSON()方法,那么该方法会在字符串化前调用。
JSON.stringify({a : undefined, b : function () {}, c: 1}) // "{"c":1}" JSON.stringify([undefined, function () {},1]) // "[null, null, 1]"ToNumber 数字化
对象在强制转换为数字的时候,会优先调用valueOf()方法,如果返回基本类型的值,则直接使用该返回值;
如果返回值不是基本类型,则会继续调用toString()方法,如果toString()返回基本类型的值,则直接使用该返回值,否则报错。
Number([]),因为[].valueOf()返回值不是基本类型,因此会调用toString(), 等价于Number()
ToBoolean 布尔化javascript有以下假值:
undefined false +0、-0 和 NaN假值的布尔强制类型转化为false
可以理解为假值列表以外的都是真值(true)
== 允许在相等比较中进行强制类型转换,=== 不允许
== 和 === 都会检查操作数的类型,区别在于操作数类型不同时他们的处理方式不同,即== 会进行强制类型转换
null == undefined NaN != NaN null != 0 undefined != 0 NaN != 0 [] == false [] == 0 [] == [] == ![]正确的使用 ==
如果两边的值中有true或者false,千万不要使用 == 如果两边的值中有[]、或者0, 尽量不要使用 ==
水灵儿 www.zyl.me 爱折腾,喜欢造,花起钱来毫不心疼,事后沉默一周... 极简主义者,主从事Web开发兼前端爱好者。 全栈开发尝试者、自媒体、极简主义者、爱心极客
相关文章
- 第七节:语法总结(1)(自动属性、out参数、对象初始化器、var和dynamic等) 图片放大镜 JavaScript-基础 用javascript写原生ajax(笔记) 初遇 Asp.net MVC 数据库依赖缓存那些事儿 前端JS 与 后台C# 之间JSON序列化与反序列化(笔记)
- 【学习笔记12】:JavaScript自增自减前置后置语法
- 【学习笔记17】JavaScript作用域
- 【学习笔记19】JavaScript数组的基本认识
- 【学习笔记21】JavaScript数组的基本方法
- 【学习笔记29】JavaScript数据类型之间的面试题
- 【学习笔记36】JavaScript求1到10的随机数
- 【学习笔记52】JavaScript正则表达式
- 【学习笔记60】JavaScript原型链的理解
- 简单粗暴的JavaScript笔记-1
- Javascript 笔记与总结(1-6)Javascript 面向对象
- Javascript 笔记与总结(2-6)var
- Javascript 笔记与总结(2-3)Javascript 运算符、控制结构与对象操作
- [学习笔记]Javascript可选的分号
- Java程序猿的JavaScript学习笔记(1——理念)
- JavaScript高级程序设计学习笔记--高级技巧
- JavaScript高级程序设计学习笔记--错误处理与调试
- JavaScript高级程序设计学习笔记--事件
- JavaScript高级程序设计学习笔记--BOM
- JavaScript高级程序设计学习笔记--函数表达式