We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在日常使用if等判断语句时,你会碰到隐式转化。例如以下的例子👇
if(""){ console.log('true') }
所以了解类型转化也成了我们的必备技能。
所有基本类型的值都是不可改变的。但需要注意的是,基本类型本身和一个赋值为基本类型的变量的区别。变量会被赋予一个新值,而原值不能像数组、对象以及函数那样被改变。
这是我在第一次使用js碰到的问题。
let str = 'abcdefg' for (let i = 0; i < str.length; i++) { str[i] = 'A' } console.log(str)//abcdefg
从 str 不可变,可以验证基本类型的值不可变。
str
falsy 值 (虚值) 是在 Boolean 上下文中认定为 false 的值
falsy
Boolean
js中只有以下7个Falsy值:
原始值到布尔值。
除了 Falsy 其他的都转化为 true 。
Falsy
true
原始值转化为字符串。
相当于 原始值+“”
原始值+“”
原始值转化为数字。
Boolean:true=>1、 false=>0
String:转化为数字或者 NaN 。
String
null
undefined
new Object()
Number
BigInt
Symbol
这里有3个函数可能会影响结果。
Symbol.toPrimitive
toString()
valueOf()
一个对象可被转换为原始值。该函数被调用时,会被传递一个字符串参数 hint ,表示要转换到的原始值的预期类型。 hint 参数的取值是 "number"、"string" 和 "default" 中的任意一个
hint
"number"
"string"
"default"
举个栗子
返回一个表示该对象的字符串。
注意⚠️ toString 在不同类型中表现不同。(数组、函数等都会重写 toString 方法)
返回值为该对象的原始值。
注意⚠️ valueOf 在不同类型中表现不同。(数组、函数等都会重写 valueOf 方法)
valueOf
必须使用 Number.isNaN() 或 isNaN() 函数。
Number.isNaN()
isNaN()
===:进行比较时,不会类型转化。
==:进行比较时,会类型转化。
如果 x 或 y 中有一个为 NaN,则返回 false;
NaN
false
如果 x 与 y 皆为 null 或 undefined 中的一种类型,则返回 true(null == undefined // true);否则返回 false(null == 0 // false);
如果 x,y 类型不一致,且 x,y 为 String、Number、Boolean 中的某一类型,则将 x,y 使用 toNumber 函数转化为 Number 类型再进行比较;
toNumber
如果 x,y 中有一个为 Object,则首先使用 ToPrimitive 函数将其转化为原始类型,再进行比较。
Object
ToPrimitive
此处引用来自 JavaScript 运算符规则与隐式类型转换详解
let a={name:'a'} let b={name:'a'} a==b//false a==a//true
2个都是对象时,我猜测是:比较地址引用。
发现有趣的现象[6,2,3]>[9,6]的结果为 true
[6,2,3]>[9,6]
可以看到 > 可以对数组进行比较。(按字典序返回结果)
>
PS.如果字典序排列中,你缺少了一位,缺少的这一位比比0小
MDN
JavaScript核心概念(1):类型转换
JavaScript 运算符规则与隐式类型转换详解
The text was updated successfully, but these errors were encountered:
No branches or pull requests
类型转化
在日常使用if等判断语句时,你会碰到隐式转化。例如以下的例子👇
所以了解类型转化也成了我们的必备技能。
基本数据类型和引用数据类型
所有基本类型的值都是不可改变的。但需要注意的是,基本类型本身和一个赋值为基本类型的变量的区别。变量会被赋予一个新值,而原值不能像数组、对象以及函数那样被改变。
举个例子
这是我在第一次使用js碰到的问题。
从
str
不可变,可以验证基本类型的值不可变。Falsy
falsy
值 (虚值) 是在Boolean
上下文中认定为 false 的值js中只有以下7个Falsy值:
原始值转换到原始值
原始值到布尔值。
除了
Falsy
其他的都转化为true
。原始值转化为字符串。
相当于
原始值+“”
原始值转化为数字。
Boolean
:true=>1、 false=>0
String
:转化为数字或者 NaN 。原始值转化到对象
null
和undefined
使用new Object()
转化为对象,将会创建并返回一个空对象。Boolean
、String
、Number
、BigInt
、Symbol
。对象转化到原始值
这里有3个函数可能会影响结果。
Symbol.toPrimitive
toString()
valueOf()
Symbol.toPrimitive
一个对象可被转换为原始值。该函数被调用时,会被传递一个字符串参数
hint
,表示要转换到的原始值的预期类型。hint
参数的取值是"number"
、"string"
和"default"
中的任意一个举个栗子
toString()
返回一个表示该对象的字符串。
注意⚠️ toString 在不同类型中表现不同。(数组、函数等都会重写 toString 方法)
valueOf()
返回值为该对象的原始值。
注意⚠️
valueOf
在不同类型中表现不同。(数组、函数等都会重写valueOf
方法)测试
Symbol.toPrimitive优先
转为数字时,valueOf 优先。转为字符串时,toString 优先
判断 NaN
必须使用
Number.isNaN()
或isNaN()
函数。===与==
===:进行比较时,不会类型转化。
==:进行比较时,会类型转化。
如果 x 或 y 中有一个为
NaN
,则返回false
;如果 x 与 y 皆为
null
或undefined
中的一种类型,则返回true
(null == undefined // true);否则返回false
(null == 0 // false);如果 x,y 类型不一致,且 x,y 为
String
、Number
、Boolean
中的某一类型,则将 x,y 使用toNumber
函数转化为Number
类型再进行比较;如果 x,y 中有一个为
Object
,则首先使用ToPrimitive
函数将其转化为原始类型,再进行比较。此处引用来自 JavaScript 运算符规则与隐式类型转换详解
测试
2个都是对象时,我猜测是:比较地址引用。
>比较
发现有趣的现象
[6,2,3]>[9,6]
的结果为true
可以看到
>
可以对数组进行比较。(按字典序返回结果)PS.如果字典序排列中,你缺少了一位,缺少的这一位比比0小
参考
Falsy
MDN
JavaScript核心概念(1):类型转换
Symbol.toPrimitive
JavaScript 运算符规则与隐式类型转换详解
The text was updated successfully, but these errors were encountered: