一、逻辑难点
1、临时包装对象(构造函数 String(), Number(), Boolean())
基础数据类型string number bollean 不是对象,但能使用一些方法和属性的原因是:
只要它们调用方法或属性时 , JavaScript就会 自动new 对应的构造函数,把它们 暂时 转换成对象;此时它们就继承了构造函数的方法和属性。方法或属性一旦引用结束,临时对象就会立即销毁。
null 和 undefined 任何情况都不能使用方法和属性,是因为它们没有构造函数
2、作用域
定义:变量或函数起作用的区域
分为: 局部/函数 作用域 和 全局作用域
局部作用域特点:
调用函数时 才会执行代码 形成作用域,调用结束后作用域立即销毁;
访问变量时,自己有就访问自己的,没有就去访问上一级的;
在函数内部给未声明的变量赋值时,作用域链上一级 ,上面创建并赋值。
(预处理)函数运行时 会产生一个作用域
① 形参预编译 :提升形参变量声明 然后赋值
① 函数内部 预编译: 提升变量声明
② 提升函数 及其 函数体
③ 最后按照函数体内部的代码逻辑 执行代码
(函数调用时 ,是在声明的地方)
3、作用域链
① 函数声明时,产生一个作用域链,该作用域链 首先继承当前作用域
② 函数运行时 :对函数形参进行预编译 产生作用域1- -> 形参赋值,加入作用域链
③ 函数内部预编译 产生作用域2,加入作用域链 --> 执行逻辑代码
(注:函数调用 是在 函数声明的地方 )
4、块级作用域
由大括号括起来的的块区,例如 if ,while , for 等。
① 在块级作用域中,不允许 var 和 function 定义相同名字的变量或函数;
② 没有变量提升,在全局预编译时,块级区域里面的 var 和 function 以相同规则提升在前面,但函数赋值为undefined ,函数体没有提升,只有在进入块级作用域时 , 立即释放。
( 其实相当于还在全局作用域内,只是对函数 let 、count有限制作用。函数体被暂时锁住)
5、this 指向问题
(司老师)
① 全局 下 ,this 指向 windows
② 构造函数 里面,this 指向 实例化对象
③ 普通函数 ,谁调用 指向谁;找不到谁调用的时候 this 指向 Windows。(找不到谁调用 是指 理论上的调用对象 不能用 标准的规定 表达)
④ 匿名函数 中this指向 Windows全局对象
⑤ 系统内置函数 (定时器)中的this 指向 全局对象
⑥ apply(),call(),bind() 绑定this指向为 指定对象
⑦eval()中的this 指向 调用上下文中的 this
⑧ 立即执行函数中的 this 指向 window
this (蒋老师)
①是一个函数的调用者(指向离this最近的function、方法的调用者,如果找不到调用者则指向顶层对象)
②一个函数被执行根据它的业务场景可以有很多名称:闭包,回调函数, 事件处理程序, 构造函数, 方法, API, SDK,模块, 代码块
函数的运行一定有对象来调用;
6、构造函数
自己定义的函数 , 通过 new关键字 可以 实例化对象。函数名使用大驼峰命名法。
使用 new 时的隐式操作:
① 隐式创建 对象 this = { __proto__}
② 执行代码
③ 隐式返回 this 对象 ;(当有显示返回值时 ,若为基础数据类型 , 则不起效果 返回值任然为 this 对象 ; 若为 引用数据类型 , 该数据则代替 this 对象 做返回值)
27、原型对象
(1)定义:
① 原型 是构造函数 默认创建的一个属性 [[ prototype ]]
② 原型 是一个对象, 自带属性 __proto__ 和 constructor ,constructor的值就是该函数
③ 原型 的所有属性 和方法 都能被该函数 实例化出来的对象 所继承 ,对象通过 __proto__ 访问原型
(2)特点
① 实例化对象 里面的 __proto__ 和 构造函数里面的 [[ prototype ]] 属性 指向一致
② 所有对象里面 都有 __proto__ 属性
③ 在讨论 prototype 时 ,是通过 函数 访问原型 ; 讨论 __proto__ 时 , 是通过 实例化对象 访问原型 的。
(3)使用
①提取 实例化对象 的共有 属性和方法
② 在内置构造函数 中 追加 实例化对象 的共有 属性和方法
28、原型链
① 原型链 相连原理:
a . 所有 原型对象 都是 由 Object 构造函数 构造的,所以他们的__proto__ 都会指向 Object构造函数 原型对象,而 Object构造函数 原型对象的__proto__ 指向 null;
b . 所有 构造函数 都是 Function 构造函数 的实例化对象 ,所以 构造函数里面的__proto__ 都指向 Function 构造函数 的prototype ;
c . 所有 对象都包含 __proto__ 属性,函数也是特殊的对象
② 规则:对象访问属性 ,优先访问自己的属性;自己没有就访问原型上的 。直到 Object. prototype 没有则返回 undefined , 不会访问到 null 。
③ 使用情形: 通过 实例化函数 构造原型链 实现继承
通过 构造函数 的prototype 形成原型链 实现继承
函数 this 构造函数new 原型 变量的作用域 系统内置对象的功能 Object arrey 字符串切割 闭包 同步异步
ES6
解构赋值 箭头函数 类和对象
二、各种概念和方法
1、数值的方法
- Number()
- parseInt()
- parseFloat()
- isNaN()
- isfinite()
2、字符串的方法
- toString()
- String()
- indexOf()
- lastIndexOf()
- substring()
- substr()
- slice()
- charAt()
- charCodeAt()
- toLocaleUpperCase()
- toLocaleLowerCase()
- encodeURI()
- decodeURI
3、内置构造函数
(1)Date()
- getFullYear()
- getMonth()// 返回0~11
- getDate()
- getHour()
- getMinutes()
- getSeconds()
- getDay()
(2)Math()
- random()
- floor()
- ceil()
- round()
4、对象
(1)方法
- valueOf()
- toString()
- JSON.stringity()
- JSON.parse()
(2)属性
- get 和 set
- .语法 和 [ ] 语法
- in
- delete
5、数组
- pop()
- shift()
- push()
- unshift()
- indexOf()
- lastIndexOf()
- concat()
- slice()
- splice()
- split()
- toString()
- join()
- reverse()
- sort()
- forEach()
- every()
- some()
- map()
- filter()
- reduce()
- Array.isArray()
6、函数方法
- call()
- apply()
- bind()