js:解密类型转换:

一·if的判断:

对于括号里的表达式,会被强制转换为布尔类型注意尽量不要这样使用,但遇到这种问题,你必须清楚的知道,为什么会这样;

1.如下代码输出什么

var a = 2
if(a = 1) {
    console.log('a等于1')
}else{
    console.log('a不等于1')
}
\\a等于1

这是直接赋值,不会做比较;

2.如下代码输出什么,对比为什么会产生区别;

if ("hello") {
    console.log("hello")
}
\\hello
if ("") {
    console.log('empty')
}
\\undefined
if (" ") {
    console.log('blank')
}
\\blank
if('0.00'){
  console.log('0.00')
}
\\ 0.00

字符串转换为布尔型:空字符串为 false,其他都为 true

3.如下代码输出什么?

if ([0]) {
    console.log('array')
}
\\ array

任何对象转换成布尔型,都是true

4.如下代码输出什么?

if(NaN){
  console.log('0.00')
}
\\undefined

Number转换为布尔型; +0, −0, 或者 NaN 为 false, 其他为 true;

以上四点是需要重点注意的,以下还有一些比较常规的,更多请看下面:

26.jpg

二 、a==b的判断:

==在比较的时候可以转换数据类型,若等式两边数据类型不匹配,将会往数值类型方向转换后再进行比较

27.jpg
"" == 0  //ture
" " == 0  //ture
"" == true  //false
"" == false  //ture
" " == true  //false
" " == true  //false
" " == false  //ture
"hello" == true  //false
"hello" == false //false
"0" == true  //false
"0" == false  //true
"00" == false  //true
"0.00" == false  //true
undefined == null  //ture
 true =={} //false
[] == true  //false
var obj = { 
  a: 0, 
  valueOf: function(){return 1} 
} 
obj == "[object Object]"  //false
obj == 1  //true
obj == true  //true

转换为数值型:


28.png

注意

1.==等好两边都为对象时,比较的是地址

[]==[]
false
{}=={}
false

1.对象转化成数值为NaN,数组则不一定,因为对象转换为普通类型,首先

let arr=[123]
undefined
let obj = {123:123}
undefined
Number(arr)
123
Number(obj)
NaN
obj == 123
false
arr == 123
true

1.png

总结:

  • 如果两个值类型相同,则执行严格相等的运算
  • 如果两个值的类型不同
  • 如果一个是null,一个是undefined,那么相等
  • 如果一个是数字,一个是字符串,先将字符串转为数字,然后比较
  • 如果一个值是true/false则将其转为1/0比较
  • 如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较
  • 其它就不相等了

推荐最好使用严格等于(===)

===是严格意义的相等,只需注意NaN和NaN不等就行了

注意:

  • 1.undefined == null ;(每门语言都有不少坑,个人认为这就是JS其中的一个坑)
  • 2.如果两个操作值都是对象,则比较它们是不是指向同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true,否则,返回false

三.比较大小

1.同类型之间可以通过大于,小于;(数值型,字符串型)

3>1
\\true
'b'>'a'
\\true
"a">"1"
\\true
"a">1
\\false;想了解为什么看如下
"3">1
\\true;推荐不这样使用,字符串转化成数值很可能是NaN;

.通过相减比较大小,(数值型)

3-1
\\2

注意:

1.非数字字符串不能与数字,做除"+"以外的算数运算(它会把字符串转换成数值再计算);所以字符串不能通过减法比较大小;

'2' - 1
//1
"a" - 1
//NaN
'b'-'a'
//NaN
"3"-"1"
//2

四、通过关系运算符:

.'<',">","<=",">=",的比较''==”,类似,在比较的时候会转换数据类型,若等式两边数据类型不匹配,将会往数值类型方向转换后再进行比较;

'a'>1
//false
'a'<1
//false
'a'==1
//false
"a"<"b"
//true
'3'>1
//true

所以字母字符与数值之间无法之间比较大小;但可以通过将数字转化成字符串后在比较大小;

"a">"1"
\\true

通过ascii码比较,"1"的码值是48,"a"的码值是97,所以a<c

总结:

关系运算符

  • 两个操作数都是数值,则进行数值比较
  • 两个操作数都是字符串,则比较两个字符串对应的字符编码值
  • 两个操作数有一个是数值,则将另一个转换为数值,再进行数值比较
  • 两个操作数有一个是对象,则先调用valueOf()方法或toString()方法,再用结果比较
"3">'1'
\\true
var num = '3'>22;//false
var num = '3'>'22';//true,进行第一个数字的比较3>2,所以是true
var num = 'a'>'b';//false,a=97,b=98,ASCII表
var num = 'a'>'B';//true,B=66

更多参考:详解js运算符
作者:彭荣辉
链接://www.greatytc.com/u/0f804364a8a8
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,236评论 0 13
  • 值类型转换将值从一种类型转换为另一种类型通常称为类型转换,这是显示的情况;隐式的情况称为强制类型转换。JavaSc...
    xpwei阅读 3,634评论 0 5
  • Javascript 中有6种基本类型(包括 symbol),以及对象类型,他们在不同的运算中会被系统转化为不同是...
    faremax阅读 871评论 0 3
  • 杰克•特劳特,全球最顶尖的营销战略家,“定位”之父。在40多年的实战中不断开创与完善了定位理论。目前是特劳特全球伙...
    札记侠阅读 204评论 0 0
  • 已记不清你离开了多久 你离开后我却习惯仰望天空 似乎这样就能感到你一直都在
    miumiu7阅读 217评论 0 0