《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
标签:精粹,JavaScript,obj,函数,读书笔记,Javascript,var,undefined,name 来源: https://blog.csdn.net/qq_37954086/article/details/101146170