JS学习笔记02:JS运算符

js运算符:

  • typeof 求变量类型
  • + - * / 加减乘除
  • % 求模

★任何值(除字符串)做运算均转换为number;

★字符串除加法运算外,均转换为number - 字符串转换时如果含有非数字,则转换为NaN。

例如:

 

var t=ture+1;//t=2
var t=NaN+1;//t=NaN
var t=null+1;//null转换为0,所以t=1
var a="100"-"100";//0
var a="a123"-99;//"a123"转换为NaN,NaN-99=NaN,所以最终结果是NaN
var a="111"-null;//111
var a="100"-NaN;//NaN

字符串的加法运算:任何值和字符串做加法运算,均转换为字符串然后拼接。

(截图自JS讲座https://www.bilibili.com/video/av34087791/?p=15)

例如:

var a="123"+"456";//a为“123456”

var a=123+“123”;//a为“123123”

var a=1+2+"3";//一:1+2=3、二:3+"3"="33" 所以最后结果是"33"

var a="1"+2+3;//一:"1"+2="12"、二:"12"+3="123" 所以最后结果是"123"

var a="100"+NaN;//结果是"100NaN"

var a="100"+null;//结果是"100null"

一元运算符

+ 正号 - 负号

(截图自js讲座https://www.bilibili.com/video/av34087791/?p=16

以下演示使用一元运算符直接转换为数字的例子:

var a="18";
a = +a;//a=18

var a = 1 + "2" + 3;//a="123"
//上下对比。下方加入+号直接转换为数字
var a = 1 + +"2" + 3;//a=1+2+3=6

++自增运算符、--自减运算符

以下是后置自增/自减运算符与前置自增/自减运算符的区别:使用后置运算符该表达式值不变,自变量随后自增/自减

自减--和自增++运算规律一样,只不过是加1变成了减1

var a=1;
console.log(a++);//使用后置运算符表达式原值不变,输出1
console.log(a);//自变量已自增,输出2

var b=1;
console.log(++b);//使用前置运算符表达式立即自增,输出2
console.log(b);//自变量已自增,输出2

以下例子考验读者是否掌握前置自增与后置自增。不过编程请避免使用这种易出错的风格。

逻辑运算符

与&& 或|| 非!

var a=10;//
a=!!a;//a=true 因为非(0和NaN)为真

var a="hello";
a=!!a;//a=true 因为除了空串都是真

var a="";
a=!!a;//a=false.因为除了空串都是真

&&与:只要有1个为false就返回false。注意有短路效应

例如:

false && alert("与逻辑短路效应演示");//遇见false直接短路跳出,表达式整体值为false

||或:只要有1个为true就返回true。注意有短路效应

例如:

true || alert("或逻辑短路效应演示");//遇见true直接短路跳出,表达式整体值为true

非布尔值的与或非运算

对于非布尔值,先转成布尔值,再进行运算,再返回原值

★与运算:

    如果第一个值为true,短路直接返回第二个值(不再判断第二个值)。

    如果第一个值为false,短路直接返回第一个值(不再判断第二个值)。

例如:

var a= 1 && 100;//第一个值为true,短路直接返回第二个数(无论该数真或假)。a=100
var a = 100 && 0;//第一个值为true,短路直接返回第二个数.最终a=0

var a = 0 && NaN;//返回第一个false代表的数值0.则a=0
var a = NaN && 0;//返回第一个false代表的数值NaN.则a=NaN

★或运算:

如果第一个值为true,短路直接返回第一个值(不再判断第二个值);

如果第一个值为false,短路直接返回第二个值(不再判断第二个值)。

例如:

var a="hello" || 100;//返回第一个ture代表的值。则a="hello"
var a="" || "你好";//第一个为false,直接返回第二个值。则a="你好"

如上图,这是与或逻辑短路效应的体现

 

关系运算符

数值间关系运算:

如上图,以上是判断数值间关系运算规律。和数学规律是一样的,不赘述。

非数值间的关系运算

如果两边只有1个或没有字符串,非数值会转换成数值再比较。

  • 转换规律:true为1,false为0,数字字符串会转成数字(如“123”会转成数字123),非数字字符串会转成NaN(例如“张三”转成NaN)。注意:任何值和NaN比较都是fasle

例如:1>"张三"; 1<"张三";1<="张三";//因为“张三”会转成NaN,NaN和任何值比较都是false。所以这些表达式结果都是false

【如果关系运算符两边都是字符串】则按字符串Unicode比较(例如"a"<"b"为true)且是一位一位字符串比较。

提醒:比较英文字符串可以按字母表顺序比大小,比较中文字符串无意义。因为Unicode中文编码似乎是按康熙字典排序,康熙字典是按规定部首排序(好像还是有点意义吧,可惜不能按拼音排序)。

  • 注意:如果是两个数字型字符串比较,一定一定一定要将数值型字符串转换成字符串!!!切记!简单加个正号+即可。

例如:"123"< "5"两个字符串比大小会产生不可预测的后果!请转数值型!可写成 + "123"  < + "5"即可。

  • Unicode编码

在JS中使用\u后跟4位16进制可表达Unicode字符。例如:"\u0041"为字符"A"。(0041是16进制)

在html中使用&#后跟十进制编码即可表达Unicode字符.例如:&#65为字符"A".(65是10进制)

  • 相等运算符

注意不同类型的数据比较可能会出现不可预测的后果。谨慎操作!

不同类型间的比较,规律如下表(引自https://www.cnblogs.com/alway-july/p/6557890.html 表未验证)

类型

类型

规律

其它说明

对象

对象

比较是不是同一个内存地址

 

对象

字符串

对象先转化为字符串,然后做比较

 

对象

布尔类型

两边都要先转为数字(false是0,true是1)。是对象类型先隐式调用toString方法,然后再Number()

 alert([2]==true)未false,转为2==1 false

对象

数字

对象要转为数字,再进行比较(对象先隐式调用toString方法转化为字符串,然后再把这个字符串轮化为数字,相当于把这个字符串放到Number这个方法中)

 

数字

布尔

是进行的数字的比较

 

数字

字符串

把字符串转化为数,再比较

 

布尔

 

把两边都要转化为数字再进行比较

 

null

undefined

true

 

null,undefined

和其它类型

null和undefined和其它类型比较都是false(这两个对象没toString方法),和自身比较是true。

 

(undefined==undefined); true
(null==null);true

NaN

和其它类型

和所有比较都为false,和自身比较也为fasle,判断是否为NaN使用isNaN()

(NaN==NaN)   false

自身做布尔运算的时候的转换

类型

规律

示例

object

都是true 

 alert(!![])

number

只是0和NaN是false

 alert(!!0);

string

只有空字符串是false(不是空格字符串)

 alert(!!"");

function

都是ture

 

null,undefined

都是false

 

 

如果要判断一个数是不是NaN,可以用isNaN(参数)来判断

 

  • 全等===:值和类型均相等

  • 不全等!==:值和类型有一个不相等,或两个都不相等

例如:

123 == "123";//true
123 === "123";//false
123 === 123;//true

总结:下表为比较运算符的简要总结和实例。(来自http://www.runoob.com/js/js-comparisons.html

假设x=5,下面的表格解释了比较运算符:

运算符描述比较返回值实例
==等于x==8false实例 »
x==5true实例 »
===绝对等于(值和类型均相等)x==="5"false实例 »
x===5true实例 »
!= 不等于x!=8true实例 »
!== 不绝对等于(值和类型有一个不相等,或两个都不相等)x!=="5"true实例 »
x!==5false实例 »
> 大于x>8false实例 »
< 小于x<8true实例 »
>= 大于或等于x>=8false实例 »
<= 小于或等于x<=8true实例 »

 

三元运算符

语法:条件表达式?语句1:语句2;

例如下图max获取a与b中最大值。

下图是求3个数中最大数。不推荐这种不易阅读的编程风格

下例给出是非布尔值表达式的例子

"hello" ? alert("1") : alert("2");//字符串转换为布尔值真,执行alert("1")
"" ? alert("1") : alert("2");//空字符串转换为布尔值假,执行alert("2")

逗号运算符

运算符优先级

表详见https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

如果不清楚优先级,也无需记忆,使用括号即可。例如下图不清楚优先级,使用括号获得需要的运算顺序

代码块

注意:代码块只具有分组功能,无其他功能。【这是和其他编程语言不同的!!!切记!】

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值