为了账号安全,请及时绑定邮箱和手机立即绑定

数据类型比较 数据类型转换 == ,a=b={}赋值

标签:
JavaScript

var a=b={n:1}//a b 都指向n:1空间地址;
a.x=a={z:2}//正确思想赋值是从由往左,但是在运算符 = 赋值的时候,
// . () 等优先级比较高,所以我们先a.x 进行赋值,然后在给a进行赋值
console.log(a) // {z:2}
console.log(b)// a.x修改了a和b他们同一个空间;所以b同时也增加了x属性;{n:1,x:{z:2}

查找当前作用域的上级作用域:
要看当前作用域在哪里创建的,那么他的上级作用域就在哪里;
数据类型转换:
数据类型转换
1、把其它数据类型转换为字符串(toString方法)
->null和undefined转换为字符串的'null'/'undefined',但是我们不能操作toString这个方法

->[12].toString() =>'12'
->[12,13].toString() =>'12,13'
->[[[[[1]]]],[[[2]]],[[[[[3]]]]]].toString() =>'1,2,3' ()

->({name:'周啸天'}).toString() =>'[object Object]' 普通对象调用这个方法不是转换为字符串,而是在检测数据类型(Object.prototype.toString.call())

在什么情况下,我们需要把其它数据类型转换为字符串?
  字符串拼接
    1+'1' =>'11' 加号在JS中不仅仅是数学运算,还有字符串拼接的作用,如果加号的一边遇到了字符串,都是字符串拼接
    1-'1' =>0 除了加号,减法/乘法/除法都是数学运算,会把其它的非数字类型转换为数字类型,在进行运算

  1+null+undefined+'12'+[]+undefined+{name:'张三'}+null
    ->1+null <=> 1+0 = 1
    ->1+undefined <=> 1+NaN = NaN
    ->NaN+'12' = 'NaN12'
    ->'NaN12' + [] = 'NaN12'
    ->'NaN12' + undefined = 'NaN12undefined'
    ->'NaN12undefined' + {name:'张三'} = 'NaN12undefined[object Object]'
    ->'NaN12undefined[object Object]'+null = 'NaN12undefined[object Object]null'

2、把其它数据类型转为布尔
“0、NaN、null、undefined、空字符串”转换为FALSE,其余的都转换为TRUE

什么时候需要用到这个转换?
  -> ! / !! / Boolean()
  -> if(12){} 先把12转换为布尔,然后验证真假

3、把其它数据类型转化为数字
Number('12') ->12
Number('12px') ->NaN
Number(true) ->1
Number(false) ->0
Number(null) ->0
Number(undefined) ->NaN

//->对象转数字:先把对象转为字符串,然后再转换为数字
Number([]) -> Number('') -> 0
Number([12]) -> Number('12') ->12
Number([12,13]) -> Number('12,13') ->NaN
Number({}) -> Number('[object Object]') ->NaN

什么时候会把对象转化为数字?
  ->Number()
  ->parseInt()
  ->parseFloat()
  ->数学运算

4、==在比较的时候,如果数据类型不一样,首先转换为一样的数据类型,然后再作比较
-> null==undefined:true
null===undefined:false
null==0:false
undefined==0:false

    null和undefined相等,但是和其它任何值都不相等

 -> NaN和谁都不相等(包括和自己也不相等)
    NaN===NaN:false

 -> 对象==对象 (比较的是空间的地址,地址不一样就不会相等)
    []==[]:false

 -> 对象==字符串:都转换为数字
 -> 对象==布尔:都转换为数字
 -> 对象==数字:对象转换为数字
 -> 字符串==布尔:都转换为数字
 -> 字符串==数字:把字符串转换为数字
 -> 布尔==数字:把布尔转为数字

 []==0:true
 false==0:true
 true==2:false

 []==false:true
   -> 都转换为数字0

 ![]==false:true
   -> ![]:先转布尔在取反 []变为TRUE 取反为FALSE
   -> false==false:true

 '3px'+3?alert(6):alert(NaN); =>'6'
 '3px'-3?alert(0):alert(NaN); =>'NaN'
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消