1.数组初始化
二维数组
let matrix=[[1,2,3],[4,5,6],[7,8,9]];
未定义元素undefined
let sparseArray=[1,,,,5];
包含三个未定义元素
2.对象初始化
let p={x:2.3,y:-1.2};点对象包含x,y坐标
let q={};空对象
q.x=2.3;q.y=-1.2;赋值
3.函数
let square=function(x){return x*x;};
4.属性访问符。包括.和[]
let o={x:1,y:{z:3}};
let a=[o,4,[5,6]];
o.x;//1
o.y.z//3
o["x"]//1
a[1]//4
a[2]["1"]//6
a[0].x//1
如未找到,会返回undefined
5.条件属性运算符?.
a?.b
如果a是Null或undefined,表达式返回Undefined。当a不为null,undefined会返回a.b的值。
let a{b:{}};
a.b?.c?.d//undefiend,.c会返回Undefined
?可以用于?.[],它有短路效应。
let a;
let index=0;
try{
a[index++];
}catch(e){
index;//值为1
}
a?.[index++];
index;//值依然为1,a?触发了短路
a[index++];//抛出TypeError异常
6.条件运算符用于函数调用。
function square(x,log){
log?.(x);//试图调用Log方法,如果为undefined或null,就不调用。不抛出异常
return x*x;
}
注意条件运算符在这里只判断log是否为Null或undefined,如果log为一个值不为函数,还是会抛出异常。
函数调用条件运算符依然有短路效应。
例:
o.m()//例1
o?.m()//例2
o.m?.()//例3
例1:o必须是一个对象,m是该对象的方法
例2:如果o为Null或undefined,返回Undefined。如果o不为前述两者,它必须包含一个m方法
例3:o必须不是null和undefined,它如果包含一个m方法,调用方法。如果不含M方法,则返回undefined
例2是对o进行判断,例3是对o.m方法进行判断。
7.一些有特点的操作符
(1)typeof 返回类型名的字符串
(2) ~位取反运算符
(3)void 返回undefined
(4)**幂运算符
(5)<<左移运算符
(6)>>右移运算符,包含符号位
(7)>>>右移运算符,以0填充符号位
(8)instanceof测试对象类?
(9)in判断属性是否存在
(10)== !=不严格相等,不等运算符。判断前会进行类型转换
(11)=== !==严格相等,不等运算符。会首先判断左右两边类型
(12)& | ^位与,位或,位异或
(13)&& ||逻辑与逻辑或
(14)?? ?.
例3:
标签:返回,index,undefined,javascript,运算符,let,操作符,表达式,log From: https://www.cnblogs.com/zhongta/p/18552767