复习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 = yx = y
加法赋值(Addition assignment)x += yx = x + y
减法赋值(Subtraction assignment)x -= yx = x - y
乘法赋值(Multiplication assignment)x *= yx = x * y
除法赋值(Division assignment)x /= yx = x / y
求余赋值(Remainder assignment)x %= yx = x % y
求幂赋值(Exponentiation assignment)x **= yx = x ** y
左移位赋值(Left shift assignment)x <<= yx = x << y
右移位赋值(Right shift assignment)x >>= yx = x >> y
无符号右移位赋值(Unsigned right shift assignment)x >>>= yx = x >>> y
按位与赋值(Bitwise AND assignment)x &= yx = x & y
按位异或赋值(Bitwise XOR assignment)x ^= yx = x ^ y
按位或赋值(Bitwise OR assignment)x \= yx = x \y

算术运算符

算术运算符使用数值(字面量或者变量)作为操作数并返回一个数值.标准的算术运算符就是加减乘除(+ - * /)。当操作数是浮点数时,这些运算符表现得跟它们在大多数编程语言中一样(特殊要注意的是,除零会产生Infinity)。例如:

1 / 2;  // 0.51 / 2 == 1.0 / 2.0; // true

位运算符

位运算符将它的操作数视为32位元的二进制串(0和1组成)而非十进制八进制或十六进制数。例如:十进制数字9用二进制表示为1001,位运算符就是在这个二进制表示上执行运算,但是返回结果是标准的JavaScript数值。

OperatorUsageDescription
按位与 ANDa & b在a,b的位表示中,每一个对应的位都为1则返回1, 否则返回0.
按位或 ORa \b在a,b的位表示中,每一个对应的位,只要有一个为1则返回1, 否则返回0.
按位异或 XORa ^ b在a,b的位表示中,每一个对应的位,两个不相同则返回1,相同则返回0.
按位非 NOT~ a反转被操作数的位。
左移 shifta << 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 truevar a2 =  true && false;    // t && f returns falsevar a3 = false && true;     // f && t returns falsevar a4 = false && (3 == 4); // f && f returns falsevar a5 = "Cat" && "Dog";    // t && t returns Dogvar a6 = false && "Cat";    // f && t returns falsevar a7 = "Cat" && false;    // t && f returns false

下面是||(逻辑"或")操作符的示例。

var o1 =  true || true;     // t || t returns truevar o2 = false || true;     // f || t returns truevar o3 =  true || false;    // t || f returns truevar o4 = false || (3 == 4); // f || f returns falsevar o5 = "Cat" || "Dog";    // t || t returns Catvar o6 = false || "Cat";    // f || t returns Catvar o7 = "Cat" || false;    // t || f returns Cat

下面是!(逻辑"非")操作符的示例。

var n1 = !true;  // !t returns falsevar n2 = !false; // !f returns truevar n3 = !"Cat"; // !t returns false

短路求值
作为逻辑表达式进行求值是从左到右,它们是为可能的“短路”的出现而使用以下规则进行测试:

false && anything    // 被短路求值为falsetrue || 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 operandtypeof (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 操作的常见用法。

// Arraysvar trees = new Array("redwood", "bay", "cedar", "oak", "maple");0 in trees;        // returns true3 in trees;        // returns true6 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 truevar myString = new String("coral");"length" in myString;  // returns true// Custom objectsvar 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_INTEGERJavaScript最小安全整数.
Number.MAX_SAFE_INTEGERJavaScript最大安全整数.

数字的方法

方法描述
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位表现形式

字符串和文本