写在前面
- 我是个Javascript的初学者。有很多地方写的不完善的,多多指教。
- 内容主要来自老师的ppt,但是存在增删改
- 我觉得只是听网课的话,走马观花的看一遍其实并不会留下多少印象,但是自己写点东西就会不一样
- 所以在自己写的时候,可以做到一个信息过滤,将已经懂的,或者艰涩难懂的略去
js的表达式和运算符
4.2 对象和数组的初始化表达式
- 对象和数组初始化表达式实际上是一个新创建的对象和数组
- 数组初始化
1 | [] //一个空数组 |
数组初始化表达式中的元素是可以嵌套的,(数组中的数组)
1 | var matrix =[[1,2,3],[4,5,6]]//二维数组 |
数组初始化
- JavaScript对数组初始化表达式进行求值的时候,数组初始化表达式中的元素表达式也都会各自计算一次
- 数组直接两种的列表都好之间的元素可以省略,这是省略的空位会填充值undefined。但结尾处的单个逗号不会创建undefined元素
1 | var myarray1 = [1,2,,,5]; |
- 对象初始化
1 | var p = {x:2,y:1}; //一个拥有两个属性成员的对象 |
- 对象直接量也可以嵌套
1 | var rectangle = { unpperleft :{x:2,y:2},lowerleft:{x:2,y:2}}; |
- JavaScript对数组初始化表达式进行求值的时候,数组初始化表达式中的元素表达式也都会各自计算一次
1 | var p = {x:2,y:1}; |
Map(补充)
1 | //Map 是一组键值对的结构,具有极快的查找速度 |
- 初始化Map
- 初始化Map需要一个二维数组,向上面一样,或者直接初始化一个空的Map
1 | var m = new Map(); |
++++
Set
- 创建一个set
- 通过数组作为输入创建,或者直接创建一个空的set
1 | var s2 = new Set([1,2,3]); |
4.3 函数定义表达式
- 函数定义表达式 定义一个JS函数,表达属的值就是这个新定义的函数
1 | var square = function(x){ |
4.4 属性访问表达式:得到一个对象属性或者一个数组元素的值
- 可以通过方括号或者点的方法来访问
1 | expression.indentifier |
4.5 调用表达式
- 执行过程:首先计算函数表达式,然后计算参数表达式,得到一组参数值
4.6 对象创建表达式
1 | new Object(); |
4.7 运算符概述
4.8 算术表达式
4.8.3位运算符
1 | //按位与& |
4.9关系表达式
- 关系运算符用于测试两个值之间的关系,返回true或false
4.9.1相等和不等运算符
1 | == 相等 |
严格相等运算符===
- 值类型不同,则不相等
- 两个值都是NULL或者都是undefined,则他们不相等
- NaN和任何值都是不相等的,包括他的本身
- 通过x!==x来判断x是否为NaN,只有在x是NaN的时候,这个表达式的值才是true
- 一个值为0,另一个值为-0,则它们同样相等
- 如果两个值为字符串,且所含的对应位上的16位数相等,则它们相等
- 如果两个引用直指向不同的对象 ,这两个引用是不相等的
相等运算符==
- 开两个操作数的类型相同,和上文所述的===比较规则一样
- 两个操作数类型不同,那么将这样转换
- 一个是NULL,一个是undefined,则它们相等
- 数字与字符串相等比较,将字符串转换为数字,然后比较
- true ,转换为1,false转换为0
- 对象与数字或者字符串比较,使用转换规则将对象转换为原始值,然后再进行比较
- 其他不同类型之间的比较均不相等
1 | true == 1; //true; |
4.9.2 比较运算符
小于<
大于>
小于等于<=
大于等于>=
比较运算符的操作数可能是任意类型。然而只有数字和字符串才能真正执行比较操作,因此那些不是数字和字符串的操作数都将进行类型转换
- 非数字和字符串的操作数的类型转换规则:
- 如果操作数为对象,那么这个对象先转换为原始值
- 两个字符串,将依照字母表的顺序比较
- 这里提到的“字母表顺序”指的是这个字符串的16位unicode字符的索引顺序
- 如果至少有一个操作数不是字符串,那么这两个操作数都将转换为数字进行比较
- 0于-0相等
- Infinity 大于任何数字(除其本身)
- -infinity小鱼人和数字(除其本身)
- 若一种一个是(或者转换后)位NaN,返回false
1 | //注意,数字和字符串比较是,更偏爱转换为数字 |
4.9.3 in运算符
1 | var point = {x:1,y:1}; //定义一个对象 |
- 至此,我们知道in运算符其实是判断一个对象(右值)中是否一个属性(左值)
4.9.4 instanceof 运算符
- instanceof 运算符 左边是对象,右边是表示对象的 类
- 如果左侧的对象是右侧类的实例,则表达式返回true,否则为false
1 | var d = new date(); |
4.10 逻辑表达式
4.10.1 &&
- 三层理解
- 当操作数都是布尔值的时候,&&对两个值执行布尔操作
- && 可以对真值和假值进行布尔操作,都是真值返回一个真值,否则返回假值
- 先计算左操作数的值,如果是假值,那么整个表达式的结果一定是假值,这时简单的返回佐操作是的值,不会去计算右操作数,繁殖,则运行右操作数
4.10.2 ||
- 不讲了
4.10.3 !
- 不讲了
4.11 赋值表达式
- 不讲了
4.12 表达式计算
- eval()
- 动态运行源代码中的字符串是一种强大的语言特性
- 在爬虫项目中会用到、
1 | eval ("console.log('Hello world!')")// 就是Hello world! |
4.13其他运算符
条件运算符,不讲
typeof 运算符,不讲
delete运算符
+ 一元操作符
+ 用来删除对象属性或者数组元素
void 运算符
- 一元运算符,出现在操作数前,操作数可以是任意类型
- 作用:操作数会照常计算,但虎落计算结果并返回undefined
- 用处
- 在操作数具有副作用的时候使用void 来让程序更具有语义
- 这个运算符最常用在客户端的URL — javascript:URL中,在URL中可以写带有副作用的表达式,但是void则让浏览器不必显示这个表达式的计算结果
1 | <a href = "javascript:void window.open();" >打开一个新窗口</a> |
await 运算符,看不懂,暂时不讲
逗号运算符 ,
- 二元运算符,他的操作数可以实任意类型
- 首先计算左操作数,然后计算右操作数,最后返回右操作数的值
- 最常用在for循环中
1 | //for循环中的第一个逗号是var语句的一部分 |