JS隐式类型转换和逻辑短路

一.JS隐式类型转换

/*1.js隐式类型转换:当运算符两边数据类型不一致时,编译器会先转成一致再运算
    * 其他数据类型转成string:+(字符串连接符)
    * 其他数据类型转成number: 算术运算符(+ - * /  %)  自增自减(++ --) 关系运算符(> >= < <= == === != !==)
    * 其他数据类型转成boolean:  ! 逻辑非
      8种情况会得到false:  0  -0  undefined  null  NaN  false  ""(空字符串)  document.all() 
      其余为 true
    * 
  2.比较运算符 ==    ===  区别
 */

1. === 全等

严格匹配:两边数据类型与值必须要完全一致(不存在类型转换)
   console.log ( 1 === "1" );//false

2.== 不完成相等

不严格匹配:2边数据不一致,会类型转换,分5种情况
2.1 x和y都是string,number,boolean,此时如果两边不一样则会转成number后运算
  	console.log ( 1 == true )  //true
  	console.log ( "1" == true ) //true
  	console.log ( "10" == 10 );//true
2.2 如果x和y都是undefinde或者null,则返回true
	console.log(undefined == undefined) true
	console.log(undefined == null) true
2.3 如果x或y是NaN,则返回false
    console.log ( NaN == NaN );//false
    console.log ( NaN == "0" );//false
2.4 x或y,一个是复杂数据类型,一个是基本数据,会隐式类型转换;会获取复杂数据类型的原始值,然后再来比较
	/*复杂数据类型原始值
		*先转原始值 
		*[] : 空字符串
		*{} : [object Object]
	*/
	 console.log ( [ 1, 2, 3 ] == "1,2,3" );//true
     console.log({} == 0)//false
     步骤分析:(1)Object.prototype.toString.call({}) = "[object Object]:  (2)  "[object Object]:" == 0   "[object Object]" :转成Number NaN(3) NAN == 0
     console.log( {} == "[object Object]")//true
2.5 x或y 都是复杂数据类型 ,不类型转换;比较内存地址,如果地址是一样则返回true,地址不一样则返回false
    console.log({} == {});//false

二:JS中短路运算符&& 和 ||

1.逻辑与 && (找假) 如果第1个表达式的值为真,则返回表达式2;如果第一个表达式的值为假,则返回表达式1
var a = 123 && 456
console.log(a) // 456 
var aa = 0 && 456 
console.log(aa) // 0
2.逻辑或 && (找真) 如果第1个表达式的值为真,则返回表达式1;如果第一个表达式的值为假,则返回表达式2
var  b = 123 || 456
console.log(b) // 123

注:逻辑短路运算符工作中挺常用的,常用于数据值的判断.
比如:返回的结果为res,要拿到res数组对象中的数据,res.data && res.data.字段名等进行更严谨的判断

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值