共计 7436 个字符,预计需要花费 19 分钟才能阅读完成。
复习 js day2
表达式和运算符
运算符
JavaScript 拥有如下类型的运算符。本节描述了运算符和运算符的优先级。
- 赋值运算符(Assignment operators)
- 比较运算符(Comparison operators)
- 算数运算符(Arithmetic operators)
- 位运算符(Bitwise operators)
- 逻辑运算符(Logical operators)
- 字符串运算符(String operators)
- 条件(三元)运算符(Conditional operator)
- 逗号运算符(Comma operator)
- 一元运算符(Unary operators)
- 关系运算符(Relational operator)
解构赋值
详见 http://es6.ruanyifeng.com/#do…
赋值运算符
一个 赋值运算符(assignment operator) 将它右边操作数的值赋给它左边的操作数。最简单的赋值运算符是等于(=),它将右边的操作数值赋给左边的操作数。那么 x = y 就是将 y 的值赋给 x。
还有一些复合赋值操作符,它们是下表列出的这些操作的缩写:
名字 | 简写的操作符 | 含义 | ||
---|---|---|---|---|
赋值(Assignment) | x = y | x = y | ||
加法赋值(Addition assignment) | x += y | x = x + y | ||
减法赋值(Subtraction assignment) | x -= y | x = x – y | ||
乘法赋值(Multiplication assignment) | x *= y | x = x * y | ||
除法赋值(Division assignment) | x /= y | x = x / y | ||
求余赋值(Remainder assignment) | x %= y | x = x % y | ||
求幂赋值(Exponentiation assignment) | x **= y | x = x ** y | ||
左移位赋值(Left shift assignment) | x <<= y | x = x << y | ||
右移位赋值(Right shift assignment) | x >>= y | x = x >> y | ||
无符号右移位赋值(Unsigned right shift assignment) | x >>>= y | x = x >>> y | ||
按位与赋值(Bitwise AND assignment) | x &= y | x = x & y | ||
按位异或赋值(Bitwise XOR assignment) | x ^= y | x = x ^ y | ||
按位或赋值(Bitwise OR assignment) | x \ | = y | x = x \ | y |
算术运算符
算术运算符使用数值 (字面量或者变量) 作为操作数并返回一个数值. 标准的算术运算符就是加减乘除(+ – * /)。当操作数是浮点数时,这些运算符表现得跟它们在大多数编程语言中一样(特殊要注意的是,除零会产生 Infinity)。例如:
1 / 2; // 0.5
1 / 2 == 1.0 / 2.0; // true
位运算符
位运算符将它的操作数视为 32 位元的二进制串(0 和 1 组成)而非十进制八进制或十六进制数。例如:十进制数字 9 用二进制表示为 1001,位运算符就是在这个二进制表示上执行运算,但是返回结果是标准的 JavaScript 数值。
Operator | Usage | Description | |
---|---|---|---|
按位与 AND | a & b | 在 a,b 的位表示中,每一个对应的位都为 1 则返回 1,否则返回 0. | |
按位或 OR | a \ | b | 在 a,b 的位表示中,每一个对应的位,只要有一个为 1 则返回 1,否则返回 0. |
按位异或 XOR | a ^ b | 在 a,b 的位表示中,每一个对应的位,两个不相同则返回 1,相同则返回 0. | |
按位非 NOT | ~ a | 反转被操作数的位。 | |
左移 shift | a << b | 将 a 的二进制串向左移动 b 位, 右边移入 0. | |
算术右移 | a >> b | 把 a 的二进制表示向右移动 b 位,丢弃被移出的所有位.Operator Usage Description 按位与 AND a & b 在 a,b 的位表示中,每一个对应的位都为 1 则返回 1,否则返回 0. 按位或 OR a \ | b 在 a,b 的位表示中,每一个对应的位,只要有一个为 1 则返回 1,否则返回 0. 按位异或 XOR a ^ b 在 a,b 的位表示中,每一个对应的位,两个不相同则返回 1,相同则返回 0. 按位非 NOT ~ a 反转被操作数的位。左移 shift a << b 将 a 的二进制串向左移动 b 位, 右边移入 0. 算术右移 a >> b 把 a 的二进制表示向右移动 b 位,丢弃被移出的所有位. (译注: 算术右移左边空出的位是根据最高位是 0 和 1 来进行填充的) 无符号右移 a >>> b 把 a 的二进制表示向右移动 b 位,丢弃被移出的所有位,并把左边空出的位都填充为 0 (左边空出位用 0 填充) |
无符号右移(左边空出位用 0 填充) | a >>> b | 把 a 的二进制表示向右移动 b 位,丢弃被移出的所有位,并把左边空出的位都填充为 0 | |
逻辑运算符
运算符 | 范例 | 描述 | ||||||
---|---|---|---|---|---|---|---|---|
逻辑与 (&&) | expr1 && expr2 | (逻辑与) 如果 expr1 能被转换为 false,那么返回 expr1;否则,返回 expr2。因此,&& 用于布尔值时,当操作数都为 true 时返回 true;否则返回 false. | ||||||
逻辑或 (\ | \ | ) | expr1 \ | \ | expr2 | (逻辑或) 如果 expr1 能被转换为 true,那么返回 expr1;否则,返回 expr2。因此,\ | \ | 用于布尔值时,当任何一个操作数为 true 则返回 true;如果操作数都是 false 则返回 false。 |
逻辑非 (!) | !expr | (逻辑非) 如果操作数能够转换为 true 则返回 false;否则返回 true。 |
下面是 &&(逻辑 ” 与 ”)操作符的示例。
var a1 = true && true; // t && t returns true
var a2 = true && false; // t && f returns false
var a3 = false && true; // f && t returns false
var a4 = false && (3 == 4); // f && f returns false
var a5 = "Cat" && "Dog"; // t && t returns Dog
var a6 = false && "Cat"; // f && t returns false
var a7 = "Cat" && false; // t && f returns false
下面是 ||(逻辑 ” 或 ”)操作符的示例。
var o1 = true || true; // t || t returns true
var o2 = false || true; // f || t returns true
var o3 = true || false; // t || f returns true
var o4 = false || (3 == 4); // f || f returns false
var o5 = "Cat" || "Dog"; // t || t returns Cat
var o6 = false || "Cat"; // f || t returns Cat
var o7 = "Cat" || false; // t || f returns Cat
下面是!(逻辑 ” 非 ”)操作符的示例。
var n1 = !true; // !t returns false
var n2 = !false; // !f returns true
var n3 = !"Cat"; // !t returns false
短路求值
作为逻辑表达式进行求值是从左到右,它们是为可能的“短路”的出现而使用以下规则进行测试:
false && anything // 被短路求值为 false
true || anything // 被短路求值为 true
逻辑的规则,保证这些评估是总是正确的。请注意,上述表达式的 anything 部分不会被求值,所以这样做不会产生任何副作用。
字符串运算符
除了比较操作符,它可以在字符串值中使用,连接操作符(+)连接两个字符串值相连接,返回另一个字符串,它是两个操作数串的结合。
例如,
console.log("my" + "string"); // console logs the string "my string".
简写操作符 += 也可以用来拼接字符串,例如:var myString = "alpha";
myString += "bet"; // 返回 "alphabet"
条件(三元)运算符
条件运算符是 JavaScript 中唯一需要三个操作数的运算符。运算的结果根据给定条件在两个值中取其一。语法为:
条件 ? 值 1 : 值 2
如果条件为真,则结果取值 1。否则为值 2。你能够在任何允许使用标准运算符的地方使用条件运算符。
例如,
var status = (age >= 18) ? “adult” : “minor”;
当 age 大于等于 18 的时候,将“adult”赋值给 status;否则将“minor”赋值给 status。
一元操作符
typeof
typeof 操作符 可通过下面 2 种方式使用:
typeof operand
typeof (operand)
typeof 操作符返回一个表示 operand 类型的字符串值。operand 可为字符串、变量、关键词或对象,其类型将被返回。operand 两侧的括号为可选。
假设你定义了如下的变量:
var myFun = new Function("5 + 2");
var shape = "round";
var size = 1;
var today = new Date();
typeof 操作符将会返回如下的结果:typeof myFun; // returns "function"
typeof shape; // returns "string"
typeof size; // returns "number"
typeof today; // returns "object"
typeof dontExist; // returns "undefined"
对于关键词 true 和 null,
typeof 操作符将会返回如下结果:
typeof true; // returns "boolean"
typeof null; // returns "object"
对于一个数值或字符串,typeof 操作符将会返回如下结果:
typeof 62; // returns "number"
typeof 'Hello world'; // returns "string"
对于属性值,typeof 操作符将会返回属性所包含值的类型:
typeof document.lastModified; // returns "string"
typeof window.length; // returns "number"
typeof Math.LN2; // returns "number"
对于方法和函数,typeof 操作符将会返回如下结果:
typeof blur; // returns "function"
typeof eval; // returns "function"
typeof parseInt; // returns "function"
typeof shape.split; // returns "function"
对于预定义的对象,typeof 操作符将会返回如下结果:
typeof Date; // returns "function"
typeof Function; // returns "function"
typeof Math; // returns "object"
typeof Option; // returns "function"
typeof String; // returns "function"
void
void 运算符运用方法如下:
void (expression)
void expression
void 运算符, 表明一个运算没有返回值。expression 是 javaScript 表达式,括号中的表达式是一个可选项,当然使用该方式是一种好的形式。
你可以使用 void 运算符指明一个超文本链接。该表达式是有效的,但是并不会在当前文档中进行加载。
如下创建了一个超链接文本,当用户单击该文本时,不会有任何效果。
<a href="javascript:void(0)">Click here to do nothing</a>
下面的代码创建了一个超链接,当用户单击它时,提交一个表单。
<a href="javascript:void(document.form.submit())">
Click here to submit</a>
关系操作符
in
in 操作符,如果所指定的属性确实存在于所指定的对象中,则会返回 true
下面的例子是 in 操作的常见用法。
// Arrays
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
0 in trees; // returns true
3 in trees; // returns true
6 in trees; // returns false
"bay" in trees; // returns false (you must specify the index number,
// not the value at that index)
"length" in trees; // returns true (length is an Array property)
// Predefined objects
"PI" in Math; // returns true
var myString = new String("coral");
"length" in myString; // returns true
// Custom objects
var mycar = {make: "Honda", model: "Accord", year: 1998};
"make" in mycar; // returns true
"model" in mycar; // returns true
instanceof
如果所判别的对象确实是所指定的类型,则返回 true。
例如, 下面的代码使用 instanceof 去判断 theDay 是否是一个 Date 对象. 因为 theDay 是一个 Date 对象, 所以 if 中的代码会执行.
var theDay = new Date(1995, 12, 17);
if (theDay instanceof Date) {// statements to execute}
表达式
表达式是一组代码的集合,它返回一个值。(译注:定义比较不好理解,看下面的举例就很好懂了。)
每一个合法的表达式都能计算成某个值,但从概念上讲,有两种类型的表达式:有副作用的(比如赋值)和单纯计算求值的。
表达式 x = 7 是第一类型的一个例子。该表达式使用 = 运算符将值 7 赋予变量 x。这个表达式自己的值等于 7。
代码 3 + 4 是第二个表达式类型的一个例子。该表达式使用 + 运算符把 3 和 4 加到一起但并没有把结果(7)赋值给一个变量。
JavaScript 有以下表达式类型:
- 算数: 得出一个数字, 例如 3.14159. (通常使用 arithmetic operators.)
- 字符串: 得出一个字符串, 例如, “Fred” 或 “234”. (通常使用 string operators.)
- 逻辑值: 得出 true 或者 false. (经常涉及到 logical operators.)
- 基本表达式: javascript 中基本的关键字和一般表达式。
- 左值表达式: 分配给左值。
数字和日期
数字对象
内置的 Number 对象有一些有关数字的常量属性,如最大值、不是一个数字和无穷大的。你不能改变这些属性,但可以按下边的方式使用它们:
var biggestNum = Number.MAX_VALUE;
var smallestNum = Number.MIN_VALUE;
var infiniteNum = Number.POSITIVE_INFINITY;
var negInfiniteNum = Number.NEGATIVE_INFINITY;
var notANum = Number.NaN;
你永远只用从 Number 对象引用上边显示的属性,而不是你自己创建的 Number 对象的属性。
下面的表格汇总了数字对象的属性:
数字的属性
属性 | 描述 |
---|---|
Number.MAX_VALUE | 可表示的最大值 |
Number.MIN_VALUE | 可表示的最小值 |
Number.NaN | 特指”非数字“ |
Number.NEGATIVE_INFINITY | 特指“负无穷”; 在溢出时返回 |
Number.POSITIVE_INFINITY | 特指“正无穷”; 在溢出时返回 |
Number.EPSILON | 表示 1 和比最接近 1 且大于 1 的最小 Number 之间的差别 |
Number.MIN_SAFE_INTEGER | JavaScript 最小安全整数. |
Number.MAX_SAFE_INTEGER | JavaScript 最大安全整数. |
数字的方法
方法 | 描述 |
---|---|
Number.parseFloat() | 把字符串参数解析成浮点数, |
和全局方法 parseFloat() 作用一致. | |
Number.parseInt() | 把字符串解析成特定基数对应的整型数字,和全局方法 parseInt() 作用一致. |
Number.isFinite() | 判断传递的值是否为有限数字。 |
Number.isInteger() | 判断传递的值是否为整数。 |
Number.isNaN() | 判断传递的值是否为 NaN. More robust version of the original global isNaN(). |
Number.isSafeInteger() | 判断传递的值是否为安全整数。 |
数字类型原型上的一些方法
方法 | 描述 |
---|---|
toExponential() | 返回一个数字的指数形式的字符串,形如:1.23e+2 |
toFixed() | 返回指定小数位数的表示形式,var a=123,b=a.toFixed(2)//b=”123.00″ |
toPrecision() | 返回一个指定精度的数字。如下例子中,a=123 中,3 会由于精度限制消失,var a=123,b=a.toFixed(2)//b=”123.00″ |
数学对象(Math)
方法 | 描述 |
---|---|
abs() | 绝对值 |
sin(), cos(), tan() | 标准三角函数; 参数为弧度 |
asin(), acos(), atan(), atan2() | 反三角函数; 返回值为弧度 |
sinh(), cosh(), tanh() | 双曲三角函数; 返回值为弧度. |
asinh(), acosh(), atanh() | 反双曲三角函数; 返回值为弧度. |
pow(), exp(), expm1(), log10(), log1p(), log2() | 指数与对数函数 |
floor(), ceil() | 返回最大 / 最小整数小于 / 大于或等于参数 |
min(), max() | |
返回一个以逗号间隔的数字参数列表中的较小或较大值(分别地) | |
random() | 返回 0 和 1 之间的随机数。 |
round(), fround(), trunc(), | 四舍五入和截断函数 |
sqrt(), cbrt(), hypot() | 平方根,立方根,平方参数的和的平方根 |
两个参数平方和的平方根 | |
sign() | 数字的符号, 说明数字是否为正、负、零。 |
clz32(), | 在 32 位 2 进制表示中,开头的 0 的数量. |
imul() | 返回传入的两个参数相乘结果的类 C 的 32 位表现形式 |
字符串和文本