2.JavaScript运算符和类型转换

JavaScript运算符和类型转换



前言

运算符分 :算数运算符,逻辑运算符,比较运算符,位运算符,赋值运算符,三目运算符。

在表达式中,运算过程中会自动产生的数据转换,其中又分显性类型转换和隐性类型转换,隐性类型转换用的是显性类型的方法。

先明白显性类型转换,再分析每个运算符中的隐性类型转换。


一、显性类型转换

1.Number()方法:
undefined为NaN,字母也为NaN,数字加字母也为NaN
false为0,true为1,null为0,负数和正数一样不变-1为-1。

var a = Number(undefined); //NaN
var a = Number("1a"); //NaN
var a = Number(false); //0
var a = Number(true); //1
var a = Number(null); //0
var a = Number("1"); //1

2.parseInt()方法:
例:

var demo = "10";
var num = parseInt(demo ,16);
console.log(typeof(num) + ":" + num);

答案显示 number: 16
var num = parseInt(demo ,radix); //radix 是基底的意思
radix 写成 16,系统会认为是以 16 进制为基底, 10(一零)是 16 进制的一零,是
以 16 进制为基底,把他转成为 10 进制的数字(就是 16),上面是以目标进制为基底,
转换成十进制(radix 范围是 2-36)

3.parseFloat()方法:

var demo = "100.2abc";
var num = parseFloat (demo);
console.log(typeof(num) + ":" + num);

答案显示 number: 100.2
parseFloat 从数字类开始看,看到除了第一个点以外的非数字类为截止,返回前面的。

4.toString()方法:
注意:undefined 和 null 不能用 toString
toString(radix)还有转换进制作用。

var demo = 123;
var num = demo.toString(8);
console.log(typeof(num) + ":" + num);

答案 173,把 123 转成为八进制
这里的 radix 意思是以十进制为基底,转换成目标进制

5.String()方法:
String(mix)转换成字符串,写什么都成了字符串,undefined和null也可以。

二、运算符与隐性类型转换

隐式类型转换内部隐式调用的是显示的方法

隐式类型转换包括 isNaN () ,++,–, +/-(一元正负),+,*,% ,,&&,|| ,!,
<,>,<= ,>= ,== ,!=

1. isNaN()方法
console.log(isNaN("abc");
//答案 true。会调用 number,先把“abc” 放 number 里面转换,通过 number 的转换再和 NaN 比对,如果相等就是 true

console.log(isNaN(null);
//答案 false,在 number 里面放 null 是 0,不是 NaN

console.log(isNaN(undefined);
//答案 true

2. ++/–(加加减减) +/-(一元正负)
++/–放a前面就是先加或减1再运算,放后面就是运算完加或减1。
例 var a = “123”;
a ++;
答案 124,++这个符号放到这里,还没运算之前,先把前面的 a 转换成 number 的 123
例 var a = “abc”;
a ++;
答案 NaN


var a =+"abc";console.log(a + ":" + typeof(a));
答案 NaN:number。尽管转换不成数字,也会转换成数字类型,因为里面隐式的调用
了一个 number

3. +
+隐式类型会转换成 string,当加号两侧有一个是字符串,就用调用 string,把两个都
变成字符串

4. *与%
两边先转换成number,再运算。
var a = "a" *1; console.log(a + ":" + typeof(a));
答案 NaN :number,先是 number(“a”)的结果乘以 number(1)的结果,最后是 NaN*1,
还是 NaN,但是数据类型是 number

5. && || !
(&&)
只有前后两个条件都为true时整体才为true,遇到假就返回,前面都为真,最后一个不管是什么都返回。
var a = 1 && 1 && 8;//答案 8,先看第一个是否为真,为真再看第二个,到最后一个直接返回结果。

所以做表达式时第一个条件为false时会发生短路逻辑。就是不会执行第二个表达式。
例:1 > 3 && console.log(1);这个后面的表达式不会执行

中途如果遇到 false,那就返回 false 的值
var a =1 + 1 && 1 – 1&&2;document.write(a); //答案 0

( || )
遇到真就返回,前面都为假,最后一个不管是什么都返回
中途如果遇到 true,那就返回 true 的值

与或非,都是有类型转换的,不过是返回的是表达式的值,不是隐士类型转换的值,

6、 < > <= >= == !=
判断是一个类型转换的值(判断每个表达式的布尔值)
(1)有数字相比较的,就会隐士类型转换成数字类型
5>4<3返回true,前面的5>4为true,true转换为1再和后面比。
4>“2”,返回true。
如果字符串这边转换为NaN,任何判断都为false。

(2)如果两边都是字符串的比较,则不会发生隐性类型转换比的是 ASCII 码。

(3)undefined与unll 不大于0不小于0不等于0,但它们两相等。NaN是唯一的一个不等于自己的。

7. 不发生类型转换的运算符===,!==
两边要绝对相等。绝对不等。

其它运算符

1.位运算符:
先将数据转为2进制进行运算,运算结束后再将结果转回10进制

     & 按位与,上下两位都是1,结果为1,否则为0 
      | 按位或,上下两位有一个1则结果为1
     ^ 按位异或,上下两位不同为1,相同为0
     >> 按位右移,删除末尾的位数(原基础上除以2再取整)
     << 按位左移,在末尾补0(原基础上乘以2)

2.赋值运算符
var a = a + 1;
可简化:
var a += 1;

3.三目运算符
格式:条件表达式 ? 表达式1 : 表达式2
如果条件表达式为true,执行表达式1
如果条件表达式为false,执行表达式2

例:2 > 1 ? console.log(‘对’) : console.log(‘错’);结果为对。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值