《JavaScript语言精粹》笔记

1.下面的值被当作假(false)
false
null
undefined
空字符串 ' '
数字 0
数字 NaN
2.如果你尝试检索一个并不存在的成员属性的值,降返回undefined, ||运算符可以用来填充默认值
var status = flight.status || 'unknown'
3.尝试从undefined的成员属性中取值会导致TypeError异常,这时可以通过&&运算符来避免错误
flight.equipment && flight.equipment.model
4.原型

原型连接在更新时时不起作用的。当我们对某个对象做出改变时不会触及改对象的原型。
原型只有在检索值时候才被用到,如果我们尝试去获得对象的某个属性值。但该对象没有此属性名,那么Javascript会试着从原型对象中获取属性值。如果那个原型对象也没有该属性,那么再从它的原型中寻找,以此类推,直到该过程最后到达终点
object.prototype。如果想要的属性完全不存在于原型链中,那么结果就是undefined值,这个过程称为委托。
原型关系是一种动态的关系,如果我们添加一个新的属性到原型中,该属性会基于该原型创建的对象可见。
stooge.professin=’actor’;
anther_stooge.profession //’actor’

5.hasOwnProperty方法不会检查原型链
6.delete不会触及原型链中的任何对象。删除对象的属性可能会让来自原型链中的属性透现出来:
another_stooge.nickname // 'Moe'
// 删除 anther_stooge的nickname属性,从而暴露出原型的nickname
delete another_stooge.nickname;
another_stooge.nickname // 'Curly'
7.所谓编程就是将一组需求分解成一组函数与数据结构的技能。
8.函数对象

每个函数在创建时会附加两个隐藏属性:函数的上下文和实现函数行为的代码。
每个函数对象在创建时也随配有一个prototype属性。它的值是一个拥有constructor属性且值即为该函数的对象。这和隐藏连接到Function.prototype完全不同。

9.函数字面量

通过函数字面量创建的函数对象包含一个连接到外部上下文的连接。这被称为闭包(closure)。

10.调用

每个函数除了声明时定义的形式参数,每个函数还接收两个附加的参数:this和arguments。参数this的值取决于调用的模式。在JavaScript中有4种调用模式:

方法调用模式
函数调用模式
构造器调用模式
apply调用模式
11.函数调用模式

当一个函数并非一个对象的属性时,那么它就是被当做一个函数来调用的:
var sum = add(3, 4)
以此模式调用函数时,this被绑定到全局对象。这是语言设计上的一个错误。倘若语言设计正确,那么当内部函数被调用时,this应该扔然绑定到外部函数的this变量。这个设计错误的后果就是方法不能利用内部函数来帮助它工作,因为内部函数的this被绑定了错误的值,所以不能共享该方法对对象的访问权。幸运的是,有一个很容易的解决方案:如果该方法定义一个变量并给它赋值为this,那么内部函数就可以通过那个变量访问到this。按照约定,我把那个变量命名为that:

// 给myObject增加一个double方法
  myObject.double = function () {
    var that = this; // 解决方法
    var helper = function() {
        that.value = add(that.value, that.value)
     }
     helper(); //以函数的形式调用helper。 
   };
   // 以方法的形式调用double
  myObject.double();
  document.writeln(myObject.value); // 6 
12.apply调用模式

不是太明白

13.参数

arguments并不是一个真正的数组。它只是一个“类似数组(array-like)”的对象。argumengs拥有一个length属性,但它没有任何数组的方法。

14.返回

一个函数总是会返回一个值,如果没有指定返回值,则返回undefined。如果函数调用时在前面加上了new前缀,且返回值不是一个对象,则返回this(该新对象)

15.闭包

函数可以访问它被创建时所处的上下文环境,这被称为闭包。

16.级联

让方法返回this而不是undefined,就可以启用级联。

17.柯里化(哪些场景会用到呢?)

柯里化允许我们把函数与传递给的参数相结合,产生出一个新的函数。
把多参数函数转换为一些列单参数函数并进行调用的技术

17.记忆

函数可以将先前操作的结果记录在某个对象里,从而避免无谓的重复运算,这种优化被称为记忆。记忆是主要用于加速程序计算的一种优化技术,它使得函数避免重复演算之前已被处理输入,而返回已缓存的结果

18.继承(待继续研究)
20.数组

设置更大的length不会给数组分配更多的空间。而把length设小将导致所有下标大于等于新length的属性被删除

21.正则表达式(待继续研究)

可处理正则表达式的方法有

regexp.exec
regexp.test
string.match
string.replace
string.search
string.split
22.方法
Array
array.concat(item...)
array.join(separator)
array.pop()
array.push(item...)
array.reverse()
array.shift()
array.slice(start, end)
array.sort(comparefn)
array.splice(start, deleteCount,item...)
array.unshift(item...)

Function

function.apply(this.Arg, argArray)

Number

number.toExponential(fractionDigits)
number.toFixed(fractionDigits)
number.toPrecision(precision)
number.toString(radix)

Object

object.hasOwnProperty(name)

RegExp

regexp.exec(string)
regexp.test(string)

String

string.charAt(pos)
string.charCodeAt(pos)
string.concat(string...)
string.indexOf(searchString, position)
string.lastIndexOf(searchString, position)
string.localeCompare(that)
string.match(regexp)
string.replace(searchValue, replaceValue)
string.search(regexp)
string.slice(start, end)
string.split(separator, limit)
string.substring(start, end)
string.toLocaleLowerCase()
string.toLocaleUpperCase()
string.toLowerCase()
string.toUpperCase()
String.fromCharCode(char...)
21.优美的特性

函数式顶级对象
给予原型继承的动态对象
对象字面量和数组字面量

21.毒瘤

全局变量。全局变量在所有作用域中都是可见的变量。
作用域。有函数作用域,没有块级作用域。
自动插入分号。
typeof null 返回‘object’。
parseInt最好加上基数,parseInt('08')和parseInt('09')返回0。
0.1+0.2不等于0.3。
typeof NaN === 'number' // true。
伪数组

你可能感兴趣的:(《JavaScript语言精粹》笔记)