JAVASCRIPT学习笔记之强制类型转换
来源:互联网 发布:java bigdecimal 加法 编辑:程序博客网 时间:2024/05/16 11:29
点击有惊喜
最近在读《你不知道的javascript》系列图书,收获蛮大,感慨也挺多的。
是的,关于javascript,你不是不知道,而是真的不知道。
就比如类型转换,从开始到看完到第二第三第N遍,我经历了如下的心路历程:
这有什么不知道的 → 一脸懵逼 → 有点意思 → 卧槽,怎么这样? → 原来是这样 → 靠,还是坑...
真可谓是不学不知道,一学吓一跳。
为了避免再次入坑,这里做个总结,不,了结。
核心点
Javascript中的强制类型转换总是返回标量基本类型值(
string, boolean, number, undefined, null
)。
直白点就是toString()
或者valueOf()
的返回值。
toString和valueOf的区别
- toString : 以字符串形式返回该对象的原始值
- valueOf : 返回最适合该对象类型的原始值
- 在数值运算中,会优先调用valueOf
- 在字符串运算中,会优先调用toString
var a = 1;a.toString() // '1'a.valueOf() // 1a + 2 // 3 优先调用valueOfa + 'string' // 1string 优先调用toStringa + '' //隐式强制类型转换String(a) //显示强制类型转换
规则
ToString 字符串化
对象在强制转换为字符串的时候,会优先调用toString()方法,如果返回基本类型的值,则直接使用该返回值;
如果返回值不是基本类型,则会继续调用valueOf()方法,如果valueOf()返回基本类型的值,则直接使用该返回值,否则报错。
数组默认的toString方法经过了重新定义,类似于数组的join(',')
方法,会将数组的各个元素以,
分隔返回。这就是String([]) === ''
的原因。
JSON.stringify易错点
JSON.stringify
在对象
中遇到undefined、function、symbol
时会自动忽略JSON.stringify
在数组
中遇到undefined、function、symbol
时会返回null
- 字符串、数字、布尔、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
- null
- false
- +0、-0 和 NaN
- ''
假值的布尔强制类型转化为false
可以理解为假值列表以外的都是真值(true
)
== 和 === 的区别
== 允许在相等比较中进行强制类型转换,=== 不允许
== 和 === 都会检查操作数的类型,区别在于操作数类型不同时他们的处理方式不同,即== 会进行强制类型转换
容易懵逼的地方
null == undefinedNaN != NaNnull != 0undefined != 0NaN != 0[] == false[] == 0[] == ''[] == ![]
正确的使用 ==
- 如果两边的值中有true或者false,千万不要使用 ==
- 如果两边的值中有[]、''或者0, 尽量不要使用 ==
其他
+
运算符 (即只有一个操作数) 用来强制转化为数字+ new Date()
- && 和 || 运算符的返回值并不一定是布尔类型,而是两个操作数其中一个的值
参考
《你不知道的JavaScript(中)》
点击有惊喜
- JAVASCRIPT学习笔记之强制类型转换
- JavaScript复习之--JavaScript强制类型转换
- JavaScript深入理解之强制类型转换
- javascript 强制类型转换
- Javascript强制类型转换
- Javascript强制类型转换
- 初探C++强制类型转换学习笔记
- JAVA学习笔记(强制类型转换)
- javascript学习笔记(2):强制类型转换机制和运算符
- javascript学习之数据类型强制转换
- 【笔记】JavaScript编码规范- 类型分配&强制转换
- javascript bool 强制类型转换
- javascript中的强制类型转换
- Javascript 强制类型转换函数
- Javascript 强制类型转换函数
- JavaScript 中的强制类型转换
- JavaScript学习笔记之强大的自动类型转换
- c++强制类型转换笔记
- 每日一练20171106
- Android进阶(三)Android 中的IPC机制(1)
- qlistwidget中的增删改
- c语言:随机数rand()
- js删除指定table的td
- JAVASCRIPT学习笔记之强制类型转换
- JavaScript高级程序设计第一章小结
- SVN
- Ajax(居家旅游必备技能)
- 【网络工程分享】无线路由连接问题
- CentOS7.2 源码包编译安装Python3.6交互界面按Backspace键和方向键出现乱码
- 每日一练20171107
- C/C++开源项目
- iOS生成SSH key且clone项目代码