《JavaScript 语言精粹》读书笔记

最后更新:
阅读次数:
  • 二进制的浮点数不能正确地处理十进制的小数
// 下面是最典型的例子
0.1 + 0.2 === 0.3; // false
  • JavaScript 只有单一的数字类型(无整型、浮点型的区别)
1 === 1.0; // true
  • 字符串也只是一种单一类型
// 字符 A 与它的 Unicode 编码表示完全相等
"A" === "\u0041"; // true
  • 可以被隐式转换为 false 布尔值的值有:falsenullundefined空字符串 ''NaN0、0.0、.0、+0、-0。除过刚刚的值,其它所有值都能被隐式转换为 true。

  • 赋值:|| 与 &&

var x;
x = a || b; // 若 a 为假,则 x 的值为 a,否则为 b
x = a && b; // 若 a 为真,则 x 的值为 a,否则为 b
  • 对象是属性的容器,其中每个属性都拥有名字和值。属性的名字是可以是包括空字符串在内的任意字符串。属性值可以是除 undefined 值之外的任何值。

  • delete 运算符可以用来删除对象自身的属性。

var obj = {
name: "percy",
age: 22
};
obj.name; // percy
delete obj.name;
obj.name; // undefined
  • 函数有四种调用模式

    • 方法调用模式: 函数当做对象的方法进行调用
    • 函数调用模式: 普通的函数调用
    • 构造器调用模式: 将函数当做构造函数来调用(前面加 new)
    • apply 调用模式: 通过 apply() 函数调用
  • 函数返回值

    • 一个函数总是会返回一个值。如果没有指定返回值,则返回 undefined
    • 如果函数以在前面加上 new 前缀的方式来调用,且返回值不是一个对象,则返回 this(该新对象)。
// 返回 undefined
function test1() {
// do something
}

console.log(test1()); // undefined
console.log(new test1()); // test1 {}

// 返回一个对象
function test2() {
var obj = {
name: "hehe",
age: 12
};
return obj;
}

console.log(test2()); // Object {name: "hehe", age: 12}
console.log(new test2()); // Object {name: "hehe", age: 12}
  • JavaScript 中的异常处理机制
try {
// do something

if (wrong) {
throw {
name: "TypeError",
message: "参数应该是数字类型~"
};
}
} catch (e) {
console.log(e.message);
} finally {
// do something
}
  • 当我们让函数不再返回 undefined 而是返回 this 时,我们就可以启用级联,即链式调用函数。(启用级联的核心就是让函数返回 this
// 可以在我的页面上做一下测试,让目录移动到右边

var contentTable = {
el: document.querySelector(".content-table"),
beRelative: function() {
this.el.style.position = "absolute";
this.el.style.right = "0px";
this.el.style.zIndex = 9999;
return this;
},
moveLeft: function() {
let that = this;
let timer = setInterval(function() {
if (Number.parseInt(window.getComputedStyle(that.el).left, 10) < 100) {
clearInterval(timer);
}
that.el.style.right =
Number.parseInt(that.el.style.right, 10) + 20 + "px";
}, 200);
return this;
}
};

contentTable.beRelative().moveLeft();

以上~