读《JavaScript权威指南》笔记(二)

1.加号运算和比较运算符的区别javascript

对于数字和字符串操做符来讲,加号运算符和比较运算符的行为都有所不一样,前者更偏心字符串,若是它的其中一个操做数是字符串的话,则进行字符串链接操做。而比较运算符则更偏心数字,只有在两个操做数都是字符串的时候,才会进行字符串的比较:java

1 + 2        // 加法. 结果是3
"1" + "2"    // 字符串链接,结果是"12"
"1" + 2      // 字符串连接,2转换为"2",结果是"12"
11 < 3       // 数字的比较,结果为false
"11" < "3"   // 字符串比较,结果为true
"11" < 3     // 数字的比较,"11"转换为11,结果为false
"one" < 3    // 数字的比较,"one"转换为NaN,结果为false

2.函数声明语句正则表达式

函数声明语句一般出如今JavaScript代码的最顶层,也能够嵌套在其余函数体内。但在嵌套时,函数声明只能出如今所嵌套函数的顶部。也就是说,函数定义不能出如今if语句、while循环或其余任何语句中。
和经过var声明变量同样,函数定义语句中的函数被显式地“提早”到了脚本或函数的顶部。所以它们在整个脚本和函数内都是可见的。使用var的话,只有变量声明提早了——变量的初始化代码仍然在原来的位置。然而使用函数声明语句的话,函数名称和函数体均提早:脚本中的全部函数和函数中全部嵌套的函数都会在当前上下文中其余代码以前声明。也就是说,能够在声明一个JavaScript函数以前调用它。数组

3.void操做符函数

javascript:void(0) void是无返回值的操做。在a标签中,若是href="#",点击后会回到网页顶部,javascript:void(0)会没有任何反应。鼠标移上去时,仍然显示手指形状的图标。spa

4.左值prototype

左值是一个古老的术语,它是指表达式只能出如今赋值运算符的左侧,在js中,变量,对象属性和数组元素均是左值。code

5.delete操做符对象

delete是一元操做符,它用来删除对象属性或者数组元素。须要注意的是,删除属性或者删除数组元素不只仅是设置了一个undefined的值。当删除一个属性时,这个属性将再也不存在。blog

6.赋值操做符

赋值操做符的结合性是从右至左,也就是说,若是一个表达式中出现了多个赋值运算符,运算顺序是从右到左。所以,能够经过以下的方式来对多个变量赋值:

i=j=k=0;     //把三个变量初始化为0

7.&& 和 ||

// 对于p和q取任意值,这两个等式都永远成立
!(p && q)=== !p || !q
!(p || q)=== !p && !q

8.instanceof运算符

instanceof运算符但愿左操做数是一个对象,右操做数标识对象的类。若是左侧的对象是右侧类的实例,则表达式返回true;不然返回false。第9章将会讲到,JavaScript中对象的类是经过初始化它们的构造函数来定义的。这样的话,instanceof的右操做数应当是一个函数。好比:

var d = new Date();// 经过Date()构造函数来建立一个新对象
d instanceof Date;   // 计算结果为true,d是由Date()建立的
d instanceof Object; // 计算结果为true,全部的对象都是Object的实例
d instanceof Number; // 计算结果为false,d不是一个Number对象
var a = [1, 2, 3];   // 经过数组直接量的写法建立一个数组
a instanceof Array;  // 计算结果为true,a是一个数组
a instanceof Object; // 计算结果为true,全部的数组都是对象
a instanceof RegExp; // 计算结果为false,数组不是正则表达式

须要注意的是,全部的对象都是Object的实例。当经过instanceof判断一个对象是不是一个类的实例的时候,这个判断也会包含对“父类”(superclass)的检测。若是instanceof的左操做数不是对象的话,instanceof返回false。若是右操做数不是函数,则抛出一个类型错误异常。

为了理解instanceof运算符是如何工做的,必须首先理解“原型链”(prototype chain)。原型链做为JavaScript的继承机制。为了计算表达式o instanceof f,JavaScript首先计算f.prototype,而后在原型链中查找o,若是找到,那么o是f(或者f的父类)的一个实例,表达式返回true。若是f.prototype不在o的原型链中的话,那么o就不是f的实例,instanceof返回false。

9.in运算符

in运算符但愿它的左操做数是一个字符串或能够转换为字符串,但愿它的右操做数是一个对象。若是右侧的对象拥有一个名为左操做数值的属性名,那么表达式返回true,例如:

var point = { x:1, y:1 };      // 定义一个对象
"x" in point                   // => true:对象有一个名为"x"的属性
"z" in point                   // => false:对象中不存在名为"z"的属性
"toString" in point            // => true:对象继承了toString()方法

var data = [7,8,9];            // 拥有三个元素的数组
"0" in data                    // => true:数组包含元素"0"
1 in data                      // => true:数字转换为字符串
3 in data                      // => false:没有索引为3的元素

10.return语句

return语句返回函数表达式的计算结果,只能在函数体内出现,若是不是的话会报语法错误

11.for in 循环

for in循环对象可枚举的属性,能够循环数组的索引属性。若是要循环的表达式为null或者undefined,JavaScirpt解释器将会跳过循环并执行后续的代码。若是表达式等于一个原始值,这个原始值将会转换为与之对应的包装对象

12.for循环

for循环中那三个表达式中的任何一个均可以忽略,可是两个分号必不可少。若是省略test表达式,那么这将是一个死循环

for(initialize ; test ; increment)
statement
//初始化 检测 更新

13.switch循环

因为对每一个case的匹配操做其实是“===”恒等运算符比较,而不是“==”相等运算符比较,所以,表达式和case的匹配并不会作任何类型转换。

switch(n)
{
case 1:
  执行代码块 1
  break;
case 2:
  执行代码块 2
  break;
default:
  n 与 case 1case 2 不一样时执行的代码
}

14.标识符

JavaScript标识符必须以字母、下划线(_)或美圆符($)开始。后续的字符能够是字母、数字、下划线或美圆符(数字是不容许做为首字符出现的,以便JavaScript能够轻易区分开标识符和数字)。

相关文章
相关标签/搜索