复习js-2

53次阅读

共计 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 位表现形式

字符串和文本

正文完
 0