《Javascript 语言精粹》读书笔记

《Javascript 语言精粹》读书笔记

语法

标识符

JavaScript不允许使用保留字命名变量或参数。

数字

JavaScript只有一个数字类型,在内部被表示为64位的浮点数。指数使用e来表示,100 和 le2 是相同的数字。

NaN是一个数值,表示一个不能产生正常结果的运算结果,NaN不等于任何值,包括自己。

字符串

Javascript 中所有的字符都是16位的。

字符串不可变,‘c’ + ‘a’ + ‘t’ === ‘cat’.

语句

当 var 语句被用在函数内部时,它定义是这个函数的私有变量。

JavaScript中的代码快不会创建新的作用域,因此变量应该被定义在函数的头部,而不是在代码块中。

下面列出的值都被当作假:

  • false
  • null
  • undefined
  • 空字符串‘’
  • 数字0
  • 数字NaN

其他所有的值都当作真,包括true、字符串“false”。

异常处理:

  • 如果throw语句在一个try代码块中,那么控制流会跳转到catch从句中
  • 如果throw语句在函数中,则该函数调用被放弃,控制流跳转到调用该函数的try语句的catch从句中。

函数如果没有制定返回表达式,那么返回值是undefined。

function fn() {
}
var a = fn();
console.log(a) 	// undefined

对象

对于丑陋的事物,爱会闭目无视

JavaScript的简单数据类型包括数字、字符串、布尔值、null和undefined,其他所有的值都是对象。

JavaScript里的对象是无类型的,它对新属性的名字和属性的值没有限制。对象可以包含其他对象,所以可以很容易的使用树状或者图形结果来表示。

检索

检索有两种方式:

obj['key']; // key
obj.key;	// key

如果检索一个不存在的成员属性的值,将返回undefined,可以使用||运算符来填充默认值:

var name = obj.name || 'none'

从undefined的成员属性中取值将会导致TypeError异常,可以通过&&运算符来避免错误。

obj.name	// undefined
obj.name.firstname	// throw "TypeError"
obj.name && obj.name.firstname		// undefined
引用

对象通过引用来传递,不会被复制。

var obj = {}

var person = obj;
person.name = 'phillzou';
console.log(obj.name)	// phillzou

函数

所有的过失在未犯以前,都已定下应处的惩罚

函数对象

每个函数在创建时会附加两个隐藏属性:函数的上下文和实现函数行为的代码。

因为函数是对象,所以它们可以像任何其他值一样被使用。

调用

JavaScript中一共有四种调用模式:

  • 方法调用模式
  • 函数调用模式
  • 构造器调用模式
  • apply调用模式
参数

当函数被调用时,参数会默认放在arguments数组中。

由于语言的一个设计错误,arguments并不是一个真正的数组,它只是一个“类似数组”的对象。arguments拥有一个length属性,但它没有任何数组方法。

返回

一个函数总是会返回一个值,如果没有指定返回值,则返回undefined。

如果函数调用时在前面加上了new前缀,且返回值不是一个对象,则返回this。

扩充类型的功能

通过给 Function.prototype 增加一个method方法,下次给对象增加方法是久不变键入prototype这几个字符。

Function.prototype.method = function (name, func) {
  this.prototype[name] = func;
  return this;
};

例如,下面给Number.prototype增加一个integer方法来改善它,会根据数字的正负来判断是使用Math.celling还是Math.floor。


Number.method('integer', function() {
  return Math[this < 0 ? 'ceil' : 'floor'](this);
});

console.log((3/2).integer());   //1
柯里化

柯里化允许我们吧函数与传递给他的参数相结合,产生一个新的函数。

把多参数函数转换为一系列单参数并进行调用的技术。

var add1 = add.curry(1);

document.writeln(add1(6)) // 7
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值