读红宝书第四版笔记

217 阅读3分钟

Symbol这一节没看懂- 以后再抽时间看吧- 感觉没啥卵用呀

Boolean('') // false

&& 按照短路逻辑去解释

  • 如果第一个操作数是对象,则返回第二个操作数。
  • 如果第二个操作数是对象,则只有第一个操作数求值为 true 才会返回该对象。
  • 如果两个操作数都是对象,则返回第二个操作数。
  • 如果有一个操作数是 null,则返回 null。
  • 如果有一个操作数是 NaN,则返回 NaN。
  • 如果有一个操作数是 undefined,则返回 undefined。

||

  • 如果第一个操作数是对象,则返回第一个操作数。
  • 如果第一个操作数求值为 false,则返回第二个操作数。
  • 如果两个操作数都是对象,则返回第一个操作数。
  • 如果两个操作数都是 null,则返回 null。
  • 如果两个操作数都是 NaN,则返回 NaN。
  • 如果两个操作数都是 undefined,则返回 undefined。
同样与逻辑与类似,逻辑或操作符也具有短路的特性。只不过对逻辑或而言,第一个操作数求值为

* /

  • 如果是 Infinity 乘以 0,则返回 NaN,

  • 如果有任一操作数是 NaN,则返回 NaN。

  • 如果是 Infinity 乘以 Infinity,则返回 Infinity。

  • 如果是 Infinity 除以 Infinity,则返回 NaN。

  • 如果是 0 除以 0,则返回 NaN。

  • 如果是非 0 的有限值除以 0,则根据第一个操作数的符号返回 Infinity 或-Infinity。

% 取模操作

  • 如果被除数是无限值,除数是有限值,则返回 NaN。
  • 如果被除数是有限值,除数是 0,则返回 NaN。
  • 如果是 Infinity 除以 Infinity,则返回 NaN。
  • 如果被除数是有限值,除数是无限值,则返回被除数。
  • 如果被除数是 0,除数不是 0,则返回 0。

指数操作符 Math.pow(2.3) == 3**2

let sum = 3
num **= 2 // num == 9

+

  • 如果有任一操作数是 NaN,则返回 NaN;
  • 如果是 Infinity 加 Infinity,则返回 Infinity;
  • 如果是-Infinity 加-Infinity,则返回-Infinity;
  • 如果是 Infinity 加-Infinity,则返回 NaN;
  • 如果是+0 加+0,则返回+0;
  • 如果是-0 加+0,则返回+0;
  • 如果是-0 加-0,则返回-0。

in of

for (const key in {a: 1, b: 2}) {
 console.log(key);
}
// a, b
for (const value of [1,2,3,4,5]) {
 console.log(value);
}
// 1, 2, 3, 4, 5

基本类型共有6种

  • Undefined
  • Null
  • Boolean
  • Number
  • String
  • Symbol

所有函数的参数都是按值传递的,ECMAScript 中函数的参数就是局部变量。

<script>
    function f(obj) {
        obj.name = 'mk'
        debugger
        obj = new Object()
        obj.name = 'yp'
    }
    let obj = {

    }
    f(obj)
    console.log(obj)
</script>

typeof

  • ECMA-262 规定,任何实现内部[[Call]]方法的对象都应该在typeof 检测时返回"function"。
  • 因为上述浏览器中的正则表达式实现了这个方法,所 以 typeof 对正则表达式也返回"function"。
  • 在 IE 和 Firefox 中,typeof 对正则表达式 返回"object"。

RegExp 正则表达式 再单独看吧

Math.max(1,2,3,0)

Math.max(...[1,2,3,0])
  • Math.ceil()方法始终向上舍入为最接近的整数。
  • Math.floor()方法始终向下舍入为最接近的整数。
  • Math.round()方法执行四舍五入。
  • Math.fround()方法返回数值最接近的单精度(32 位)浮点值表示。
  • Math.random()方法返回一个 0~1 范围内的随机数,其中包含 0 但不包含 1。
Math.floor(Math.random() * 10 + 1);

array

Array.from()的第一个参数是一个类数组对象,即任何可迭代的结构,或者有一个 length 属性 和可索引元素的结构

检测数组 Array.isArray(arr) // true

  • 迭代器
    • arr.keys()
    • arr.values()
    • arr.entries()
  • fill() arr.fill(2) 啊,原来面试想问这个呀
  • join(',')
  • 栈 push() pop()
  • 队列 push() shift()
  • concat()
  • slice(1,2) 2是结束位置,并不改变原数组的值
  • splice(1,2) 2是长度 返回值是删除的元素数组,还可以用作替换和添加
  • 搜索
    • indexOf()
    • lastIndexOf()
    • includes()
    • find()
    • findIndex()
    • every()
    • filter()
    • forEach()
    • map()
    • some()
    • reduce()

定型数组 啥玩意 用不到吧

字符串

  • slice()
  • substring()
  • substr()
	let stringValue = "hello world";
   console.log(stringValue.slice(3)); // "lo world"
   console.log(stringValue.substring(3)); // "lo world"
   console.log(stringValue.substr(3)); // "lo world"
   console.log(stringValue.slice(3, 7)); // "lo w"
   console.log(stringValue.substring(3,7)); // "lo w"
   console.log(stringValue.substr(3, 7)); // "lo worl"
  • startsWith("foo") 以...开头
  • endsWith("baz") 以...结尾
  • includes()
  • trim() 去掉前后所有空格
  • ...'abc'
  • toLowerCase()、toLocaleLowerCase()、toUpperCase()和toLocaleUpperCase()。

混入 minxin

Object.assign(dest,src) ...

Object.is()

解构赋值

let { name: personName, age: personAge } = person; 
let { name, age } = person; 

定义函数的三种方式

  1. 函数表达式
function Person(){}
  1. 函数声明
let Person = function(){}