

笔记:隐式转换规则
source link: https://juejin.im/post/5a558d0051882573291450b6
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

学习并背诵全文
类型 | Undefined | Null | String | Boolean | Number |
---|---|---|---|---|---|
值 | undefined | null | 所有字符串 | true false | 所有数字/NaN |
Object的成员叫对象,包括Array,Function,Math,Date,JSON,RegExp等除了原始值之外的所有的类型的成员。
valueOf / toString
Object | String | Array | Number | Date | Boolean | Function | |
---|---|---|---|---|---|---|---|
valueOf | 原始值 | 原始值 | 原始值 | 原始值 | 毫秒时间戳 | 原始值 | string |
toString | [Object Object] | 原始值 | join方法返回的结果 | 数字字符串 | 本地时间字符串 | 'true'/'false' | string |
Boolean(x)
X | Undefined | Null | String | Boolean | Number | Object |
---|---|---|---|---|---|---|
Boolean(X) = true | - | - | 非空字符串 | true | 非0 非NaN | 所有 |
Boolean(X) = false | undefined | null | 空字符串 | false | 0 NaN |
Number(x)
X | Undefined | Null | String | Boolean | Number | Object |
---|---|---|---|---|---|---|
Number(X) = number | - | - | 全为数字 | - | 原样返回 | desc: 先调用valueOf再转换为Number |
Number(X) = 0 | - | null | '0' | false | 0 | - |
Number(X) = 1 | - | - | '1' | true | 1 | - |
Number(X) = NaN | undefined | - | 包含数字之外的字符 | - | NaN | - |
String(x)
X | Undefined | Null | String | Boolean | Number | Object |
---|---|---|---|---|---|---|
String(x) | 'undefined' | 'null' | 原样返回 | 'true'/'false' | toString结果 | 先转为原始值,然后调用toString |
Object(x)
x | undefined | null | Boolean | Number | String | Object |
---|---|---|---|---|---|---|
Object(x) | {} | {} | 原始值为X的Boolean对象 | 原始值为X的Number对象 | 原始值为X的String对象 | 原值输出 |
Object(undefined) // {}
Object(null) // {}
Object(true) // Boolean {true}
Object(false) // Boolean {false}
Object(1) // Number {1}
Object('hello') // String {"hello"}
Object({ a: 1 }) // {a: 1}
复制代码
转换为Number
- 一元 +, - 运算符
+{} = NaN
+'20' = 20
-'20' = -20
+[] = 0;
+[1] = 1;
+[1, 2] = NaN
复制代码
-
++, -- 运算符
-
+, -, *, /, % 计算
需要注意的是,当 + 计算有字符串参与计算时,会转换为字符串。
-
>, <, >=, <= 比较运算符, 操作数都不是String类型时
-
==, != 操作数中只有String类型和Number类型,或者其中有一个是Boolean
转换为Boolean
- && ! || 运算
- if, while, do-while, for
转换为String
- + 号运算,其中一个操作符为字符串
- 比较运算,其中一个操作符为字符串
Recommend
-
46
你有没有在面试中遇到特别奇葩的js隐形转换的面试题,第一反应是怎么会是这样呢?难以自信,js到底是怎么去计算得到结果,你是否有深入去了解其原理呢?下面将深入讲解其实现原理。 其实这篇文章初稿三个月前就写好了,在我读一些源码库时,遇到了这些基础知识,想...
-
38
数据库优化是一个任重而道远的任务,想要做优化必须深入理解数据库的各种特性。在开发过程中我们经常会遇到一些原因很简单但造成的后果却很严重的疑难杂症,这类问题往往还不容易定位,排查费时费力最后发现是一个很小的疏忽造成的,又或...
-
32
隐式类型转换简介 通常 ORACLE 数据库存在显式类型转换( Explicit Datatype Conversion
-
14
在360云引擎技术博客的“深入剖析linux GCC 4.4的STL string”这篇blog的指导下,看了一些STL string的实现代码,并针对我们平时对string的一些常规用法做了一些测试。这...
-
10
有趣的JS-隐式类型转换当两个不同数据类型的操作数在做运算,或者操作数与操作符不匹配的时候,js引擎不会报错,会把操作数转成对应的数据类型继续执行下去,这个转换是自动完成的,经常被叫做隐式类型转换。其实大部分开发者都或多或少了解过这一点,...
-
14
scala_4_再谈隐式转换implicit classimplicitly methodvalue class and pimp my class patterntype classimplicit class在第二篇文章里提过隐式转换,如果我们想要给某个类型增加方法,通过隐...
-
13
scala_2_伴生对象,隐式转换,case类要点都在注释中!!!companion objectimplicit convertcase classdef val_ in scala 见征服scala_1
-
10
December 31, 2019javascript类型转换 Javascript 隐式类型转换,一篇就够了 ! 一图胜千言 Javascript发生隐式类型转换时的各种猫腻,相信各位开发者已经饱受折磨。
-
5
不管是在技术聊天群还是论坛里,总能碰到 x + y 等于多少的问题,比如 [] + {} == ?,如果你不了解其中的原理,那么就插不上话,只能眼睁睁地等大佬解答了。说到底还是JS类型转换的问题,首先我们先温习一下JS的7种内置类型:N...
-
2
Scala - 隐式转换有时候我们看scala代码的时候,会发现明明没有这个类的类型或者函数,甚至是没有这个类,编译器不仅没有报错,程序还可以正常运行,其实这里就用到了scala的隐式转换。
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK