let关键字
let是es6提出
const关键字

数据类型
typeof

基本数据类型
number
string

boolean

undefined

null

类型转换
隐式转换

显式转换

引用数据类型
数组


函数


作用域、变量

匿名函数

立即执行函数

进阶
定义


调用

函数内this指向


改变函数内部 this 指向
call

apply

解释
在JavaScript中,Math.max函数用于返回一组数中的最大值。然而,Math.max函数本身并不直接接受一个数组作为参数,而是接受任意数量的参数。为了使用数组作为参数传递给Math.max,我们可以使用Function.prototype.apply方法。apply方法允许我们调用一个函数,同时为其指定this值(在Math.max的情况下,这个值并不重要,因为Math.max不使用其this值),以及一个数组或类数组对象,该数组或对象的元素将作为单独的参数传递给函数。
console.log(Math.max.apply(null, arr)) //99
这里,apply方法被用来调用Math.max,this值被设置为null(对于Math.max来说,这没关系),而arr是一个数组,其元素将作为参数传递给Math.max。假设arr包含一些数字,比如[1, 23, 99, 4],那么Math.max将返回这些数字中的最大值,即99。
console.log(Math.max.apply(Math, arr)) //99
这行代码与上一行几乎相同,唯一的区别是this值现在被设置为Math对象。然而,对于Math.max函数来说,this值并不重要,因为它不会在其函数体内引用this。因此,无论this被设置为null还是Math,结果都是相同的。如果arr仍然包含[1, 23, 99, 4],输出仍然是99。
console.log(Math.max.apply(null, arr1)) //NaN
在这行代码中,apply方法再次被用来调用Math.max,但这次使用的是arr1数组。输出结果为NaN(Not-a-Number),这意味着arr1数组中的元素不能正确地被Math.max处理为数字。这种情况可能发生在以下几种情况之一:
arr1包含非数字元素(如字符串、对象、undefined、null等)。arr1是空的,因为Math.max在没有参数时返回-Infinity,但如果参数中包含无法转换为有效数字的值,则可能返回NaN。arr1中的数字是以某种方式(如字符串格式)提供的,这些字符串无法被Math.max正确解析为数字。例如,如果
arr1是['99', 'abc'],Math.max尝试将'abc'转换为数字时会失败,从而导致NaN的结果。如果arr1是空数组[],则理论上应该返回-Infinity,但如果有任何非数字元素,结果可能是NaN。
bind
解决方案
1.用let代替var,防止循环变量变成全局变量
2.绑定this
3.使用箭头函数
高阶函数

闭包




综合

递归
浅拷贝

深拷贝

遍历数据

对象

运算符

比较运算符

逻辑运算符

流程控制
分支语句
if

三元运算符

swich语句

循环结构

while循环

for循环

循环退出

嵌套使用
扩展

对象

操作对象


内置对象
Math
例如

Math.random()
生成0-1之间的随机数(包含0不包括1)

类
示例
- 声明(class)、实例化(new)
- 构造函数:默认函数
- 继承(extend)
- super关键字
- 类中方法之间无逗号
注意点

构造函数
ES6以前类的定义方式——使用构造函数

基本使用



构造函数原型prototype

对象原型__proto__


constructor属性



原型链


成员(属性、方法)查找机制


原型对象this指向


扩展内置对象

构造函数实现继承
拓展(fun.call函数)

借用构造函数继承父类型属性

借用原型对象继承父类型方法


ES6中类的本质

ES5 新增方法概述
数组方法






字符串方法

对象方法

















2873

被折叠的 条评论
为什么被折叠?



