1. setTimeout
setTimeout是异步执行,当主线任务完成才会执行异步任务,JavaScript是单线程的。
2. 检测类型
- Array.isArray()判断参数是否为数组
- instanceof 运算符返回一个布尔值,表示对象是否为某个构造函数的实例
- typeof 能判断类型:number、string、boolean、symbol、undefined、function;
- typeof 不能判断类型:object、array、null的变量都返回 object
- Object.prototype.toString.call()返回参数的类型字符串。
3. reverse()
- 颠倒数组,length是数组的方法
4. 数组方法
- Shift() 删除数组的第一个元素,返回被删除的元素,arr.shift()
- Unshift() 向数组开头添加一个或多个元素,返回新的长度,arr.unshift(e1,e2..)
- Pop() 删除数组最后一个元素,返回被删除的元素,arr.pop()
- Push() 向数组尾部添加一个或多个元素,返回新的长度,arr.push(e1,e2..)
5. RegExp 对象
RegExp 对象的主要方法是 exec(),该方法是专门为捕获组而设计的。 exec()接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回 null。
6. 块内声明
块内声明的变量只要没加var 都算作全局变量。
7. RegExp
-
对象有 3 个方法:test()、exec() 和 compile()。
-
test() 方法用来检测一个字符串是否匹配某个正则表达式,如果匹配成功,返回 true ,否则返回 false;
-
exec() 方法用来检索字符串中与正则表达式匹配的值。exec() 方法返回一个数组,其中存放匹配的结果。如果未找到匹配的值,则返回 null;
-
compile() 方法可以在脚本执行过程中编译正则表达式,也可以改变已有表达式。
8. typeof
typeof 为Object的值:array object null 都为Object。
9. 公有属性
disabled和readOnly都是表单的公有属性。
10. 实例对象
只有实例对象上不存在的属性和方法才会去原型上查找。
11. 正则匹配
类型 | 介绍 |
---|---|
\d | 匹配一个数字,等价于[0-9] |
\w | 匹配字母、数字或者下划线,等价于 [A-Za-z0-9_] |
+ | 匹配前面一个表达式 1 次或者多次 |
* | 匹配前一个表达式 0 次或多次 |
/g | 全局匹配 |
? | 出现0次或1次. [0,1] |
{n} | 连续出现相同的个数 |
12. match()
- 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配,不写g,只返回第一个匹配
13. import
- 用于引入css,js暂未发现这种用法。
14. 异步任务
- 异步任务分为宏任务和微任务,微任务优先级高于宏任务。promise.then执行的微任务。
- 宏任务包括:script, setTimeout, setInterval, setImmediate, I/O, UI rendering。
- 微任务包括: Promises, Object.observe, MutationObserver
- new Promise在实例化的过程中所执行的代码都是同步进行的
- Promise.then中注册的回调才是异步执行的,将其放入微任务队列中
- 执行顺序:先执行同步代码,遇到异步宏任务则将异步宏任务放入宏任务队列中,遇到异步微任务则将异步微任务放入微任务队列中,当所有同步代码执行完毕后,再将异步微任务从队列中调入主线程执行,微任务执行完毕后再将异步宏任务从队列中调入主线程执行,一直循环直至所有任务执行完毕。
15. function
function 后面带 * 的叫做generator function。函数运行时,返回一个迭代器
16. 创建对象的三种方式
- 利用new object() 创建对象:var obj1 = new object();
- 利用对象字面量创建对象: var obj2 = {};
- 利用构造函数创建对象:首字母大写,静态成员只能通过构造函数访问
function Star(name,age) {
this.name = name;
this.age = age;
this.sing = function() {
console.log('my bog')
}
}
var ldh = new Star('刘德华',18);
var zxy = new Star('张学友',19);
zxy.Sing();
ldh.Sing();
- 原型对象 prototype
直接用构造函数创建会造成内存浪费,主要作用共享方法
- 原型是一个对象,也称prototype为原型对象。
- 每一个构造函数都有一个prototype属性,拥有对象的所有属性和方法。
- 不变的方法,直接定义在prototype对象上。
- 对象和构造函数都可以访问通过prototype创建的对象
- 一般情况,公共属性定义构造函数,公共方法定义在原型对象。
function Star(name,age) {
this.name = name;
this.age = age;
}
Star.prototype.Star = function() {
console.log('my dog');
}
var ldh = new Star('刘德华',18);
var zxy = new Star('张学友',19);
zxy.Sing();
ldh.Sing();
18. 对象原型 __proto__
- 对象都有一个属性
__proto__
指向构造函数的prototype原型对象 __proto__
对象原型 与原型对象prototype是等价的。- 方法查询规则:先看对象是否存在,若不存在则通过
__prpto__
去原型对象上查找
19. constructor
构造函数
__proto__
和prototype
对象里都有一个constructor
。
function Star(name,age) {
this.name = name;
this.age = age;
}
Star.prototype = {
// 如果我们修改了原来原型对象,给原型对象赋值的是一个对象,则必须手动添加construction指回原来的构造函数。
construction: Star,
Star = function() {
console.log('my dog');
}
}
var ldh = new Star('刘德华',18);
var zxy = new Star('张学友',19);
zxy.Sing();
ldh.Sing();
20. 构造函数,实例,原型对象关系
star.prototype
star构造函数 ———————————---------—-----> star原型对象(prototype)
<--------------------------
| star.prototype.construction ⬆️
| | ldh.__proto__
| |
⬇️ |
ldh对象实例
ldh.__proto__.construction
21. 原型链
22. 对象成员查找规则
- 当访问一个对象的属性或者方法,先查找对象自身属性: ldh.sex = '男'
- 若没有则查询它的原型也就是__proto__指向的prototype的原型对象: Star.prototype.sex = 'nan'
- 若没有则查询原型对象的Object的原型对象: Object.prototype.sex = 'nan'
- 依此类推一直查询到Object为null为止。
function Star(name,age) {
this.name = name;
this.age = age;
}
Star.prototype.Star = function() {
console.log('my dog');
}
var ldh = new Star('刘德华',18);
ldh.sex = '男'
Star.prototype.sex = 'nan'
Object.prototype.sex = 'nan'
console.log(ldh.sex);
23. 原型对象的this指向对象
24. 扩展内置对象
// 给数组自定义一个数组求和方法
Array.prototype.sum = function() {
var sum = 0;
for(let i=0;this.length;i++) {
sum += this[i];
}
retrun sum;
}
console.log(arr.sum());
console.log(Array.ptototype)
25. call()
调用这个函数,并且修改函数运行时的this指向
fun.call(thisArg,arg1,arg2...)
- thisArg: 当前调用函数this的指向对象
- arg1,arg2: 传递其他参数
function sing(x,y) {
console.log('l love sing',x,y,this)
}
let obj = { name: 'lisi' }
sing.call(obj,1,2)
26. 父构造函数继承属性
调用father时需将this指向自己
function father(name,age) {
this.name = name;
this.age = age;
}
function son() {
// this是改变father的this由原来的window指向到son的指向
father.call(this,'lisi',18)
}
var data = new son();
console.log(data)
27. forEach()
- 遍历
- 不生成新数组
- retrun true; 不会终止循环
28. filter
- 筛选数组
- 返回新数组
- retrun true; 不会终止循环
29. some()
- 查找是否有元素?true :false;
- 查询到一个满足条件终止循环
- 用于查找数组中唯一的数值
- retrun后面必须写true,表示找到了该元素
30. trim()
- 字符串方法
- 清空左右字符串空白字符
- 返回新数组
- 使用方法
let str = value.trim()
- 判断方法
if(str === '')
31. apple()
- apple与call相似,但apple第二个参数是数组
- apple主要应用:求数组最大值
var arr = [1,99,8,78]
var max = Math.max.apple(Math,arr)
32. bind()
bind()接收参数与call相似,但有不相同点
- 改变函数内部this指向
- 返回原函数改变this指向的函数
- 不会调用原来的函数
- 例子:
let obj = data.bind(parm)
- 有的函数不需要立即调用,又想改变函数内部this指向
33. 函数内this指向
34. class 实现继承
class Animal {
constructor(name) {
this.name = name
}
getName() {
return this.name
}
}
class Dog extends Animal {
constructor(name, age) {
super(name)
this.age = age
}
}