【JavaScript笔记DAY2】S4-S5表达式和运算符&语句

《JavaScript权威指南》自学时记下的笔记。
DAY 2 in 2021/12/31

S4 表达式和运算符

原始表达式

包括三种:

1.常数值

2.保留字:true false null this

3.变量

对象和数组的初始化表达式

省略的数组元素是undefined:
var arr = [1,5];

属性访问

两种写法:一种用点,一种用方括号。如果有错就是undefined

运算符

优先级:乘法除法高于加法减法,赋值最后

结合性:一元操作符、赋值、三元条件运算符都是从右至左。

x = ~-y;
// x = ~(-y);
w = x = y = z;
// w = (x = (y = z));
q = a?b:c?d:e?f:g;
// q = a?b:(c?d:(e?f:g));

除法会认为是浮点数除法。

求余在面对浮点数时候也是:6.5%2.1=0.2

加法运算符:字符串和数字的转换,其中一个是字符串就会把数字转换为字符串

var a = "1";
var b = "4";
console.log(a*b,typeof(a*b));//4 number
console.log(a+b,typeof(a+b));//14 string

1 + “2” //“12”
“1” + 2 //“12”
2 + null // 2
2 + undefined //NaN

另外要考虑到结合性:

1 + 2 + “okok” //“3okok”
1 + (2 + “okok”) //“12okok”

一元运算符:+ - ++ –

前后++区别belike:后++自增但是,返回的是原来的值

var i = 1, j = ++i;//i=2,j=2
var i = 1, j = i++;//i=2,j=1

++x并不和x = x+1一样:

var x = "1";
console.log(++x);//2
x = "1";
x = x+1;
console.log(x);//"11"

关系表达式

=不同,===不做类型转换直接false,==会做类型转换:

  • null=undefined
  • 如果是字符串和数字,字符串转换为数字
  • true转换1,false转换0
  • 对象转换为对应原始值

如下后者是false是因为转换为12,true转换为1

"1"==true //true
"12"==true //false

比较运算符也类似:
与加号不同,加号偏爱字符串;比较运算符偏爱数字,只有全是字符串才比较字符串

in运算符:对象中有某个属性名-true

instanceof:左侧是对象,右侧是标识类。

&& ||:从左往右计算。”短路“

if (a==b) stop(); //a==b时调用stop()
(a==b) && stop(); //等价于

逻辑或常用来在函数体内提供默认值

var mm = max_width || pre.max_width || 500//前面没有定义就往后面塞默认值

eval运算符:
ES5中,别名是全局eval,eval本身是局部的。严格模式下,只能改局部变量,不能定义新的变量或函数。

typeof运算符:
答案有:undefined object boolean number string function等
注意:null也会是object
最常用用法:

(typeof value == "string") ? "'"+value+"'" : value

delete运算符:
用来删掉属性或元素,返回true或者false。
注意:对于数组,删去的元素是一个空洞,长度未减!

var a = [1,2,3];
delete a[2];
console.log(2 in a);//false
console.log(a.length);//3

逗号:常用在循环中

for( var i=1, j=10; i<j; i++,j--)
	console.log(i+j)

S5 语句

空语句的作用:初始化:

for(i==0; i<a.length; a[i++]=0) ;

声明语句:

函数声明也和var一样,会提前到顶部,但是整体上都可见。但可以在声明一个JS函数之前调用它。

函数声明的{}必须有。

if后的()必须有。

switch中的case是===,default可以放在任意位置(不一定要放最后)。

循环中,for/in可以来遍历属性:

var o ={ x:123, y:456};
for(var p in o){
	console.log(o[p]);
}
//123
//456

语句标签:

break和continue唯一可以使用,只在起作用的语句内有定义。
可以嵌套。任何语句可能有多个语句标签。
注意break不能跳出函数外面。

mainloop: while(XXXX){
    //....
    continue mainloop;
    //...
    break mainloop;//直接跳出该块
    //...
}

with语句:只能赋值不能创建新语句。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值