javascript操作符

操作符

算数运算符

进行数据运算时,除’+外,其他运算符可以自动将字符串数字隐形转成数字

一元运算符

+:数据相加,取正数,字符串拼接,可以将数字字符串或布尔类型等隐式转换成number类型

-:可以将字符串数字隐式转换成数字

!:!null undefined ‘’(空字符串)为true

        配合条件创建语句生成一个条件

++放在前面,并进行赋值:先累加,后赋值

++放在后面,并进行赋值:先赋值,后累加

delete:删除数组或对象中特定索引的值              [1,2,< l empty item>,4,5 ]       undifined未定义

JavaScript隐式转换是如何进行的?(面试)

JavaScript中有两类数据类型:原始类型、对象类型:原始类型(基础类型):
Undefined、Null、String、Number、Boolean、Symbol(es6新推出的,暂不考虑)
对象类型
object

基本数据类型的转换

加减乘除:

1.字符串加数字,数字就会转成字符串。数字加数字或字符串加字符串不需要转换。首先把等号左右两边进行了求原值ToPrimitive()操作,然后如果有两个或多个原始值只要有一个是String类型,就把两个或多个原始值都进行转化字符串toString()操作,进行字符串拼接;否则把两个或多个原始值都进行转化数字toNumber()操作,进行数字相加。

2.数字减字符串,字符串转成数字。如果字符串不是纯数字就会转成NaN。字符串减数字也一样。两个字符串相减也先转成数字。

3.乘,除,大于,小于跟减的转换也是一样。

(面试)有关==的隐式转换
1.undefined等于nul!
2.字符串和数字比较时,字符串转数字
3.数字和布尔比较时,布尔转数字
4.字符串和布尔比较时,两者转数字

undefined == null;//true
'0'== 0;//true,字符串转数字
0 == false;//true,布尔转数字
0'== false;//true,两者转数字


(面试)引用类型的转换

PreferredType转换策略

一如果PreferredType被标记为Number,

1、如果输入的值已经是一个原始值,则直接返回它
2、否则,如果输入的值是一个对象,则调用该对象的valueOf()方法,如果valueOf()方法的返回值是一个原始值,则返回这个原始值。
3、否则,调用这个对象的toString()方法,如果toString()方法返回的是一个原始值,则返回这个原始值。
4、否则,抛出TypeError异常:

二。如果PreferredType被标记为String

    

PreferredType的值会按照这样的规则来自动设置:
1、该对象为Date类型,则PreferredType被设置为String
2、否则,PreferredType被设置为Number

例如

[ ]+[ ] " "

进行ToPrimitive,两个都是Array对象,不是Date对象,所以以Number为转换标准,所以先调用valueOf(),结果还是[1,不是原始值,所以继续调用toString(),结果是“”(空字符串)原始值,将“”返回。第二个[]过程是相同的,返回“”。加号两边结果都是String类型,所以进行字符串拼接,结果是" "

[ ]+{ }//"[object object]'

进行ToPrimitive,依然是以Number为转换标准。
[]的结果是“”。
{}先调用valueOf(),结果是{},不是原始值,所以继续调用toString(),结果是“[object Object]”,是原始值,将“[object Object]”返回。加号两边结果都是String类型,所以进行字符串拼接,结果是“[objectObject]”

{ }+[ ]// 0

这道题按照上一题的步骤,讲道理的话,结果应该还是“[object Object]”但结果却出人意料--显示的答案是0!这是什么原因呢?原来{}+[]被解析成了{},+],前面是一个空代码块被略过,剩下+[]就成了一元运算。[]的原值是””,将””转化成Number结果是

{}+{}//"[object object][object object]

在金丝雀版本的chrome浏览器和node中,结果符合预期。结果是”object Object”
在普通版本的chrome浏览器中结果是NaN。这是为什么呢?原因是在node中会将以“{”开始,“”结束的语句外面包裹层(),就变成了({}+{}),结果就符合预期。而普通版本的chrome依然会解析成心;+,结果就变成了NaN

赋值运算符

比较运算符

双等和三等的区别
双等表示只要值相等即可为真,而三等则要求不仅值相等,而且也要求类型相同。
建议:尽量使用严格运算符 三等。因为"=="不严谨,可能会带来一些违反直觉的后果。
注意
1、对于string,number等基础类型,双等和三等是有区别的
1)不同类型间比较,双等之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等
2)同类型比较,直接进行“值”比较,两者结果一样
2、对于Array,Object等高级类型,双等和三等是没有区别的
进行“指针地址”比较
3、基础类型与高级类型,双等和三等是有区别的1)对于==,将高级转化为基础类型,进行“值”比较2)因为类型不同,===结果为false

!=和 ==用法类似 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果
!== 和 === 用法类似 只有在相同类型下,才会比较其值。

逻辑运算符

可应用于任意数值。如果有一个操作数不是布尔类型,逻辑与就不一定返回boolean类型

如果第一个操作数是null,NaN,undefined,false,0,""可被转换为false的值的时候返回该值

三目运算符

var age = 19;
var result=age >16 ?"成年人":"未成年人";

当age大于16岁时,条件为真,执行senten,其次反之

  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值