1.基本类型
2.引用类型
3.splice、split、slice、substring
4.Math是一个内置对象,拥有一些数学常数属性和教学函数方法,用于Number类型
5.try...catch语句标记要尝试的语句块,并指定一个出现异常是抛出的响应
try { nonExistentFunction(); } catch (error) { console.error(error); // expected output: ReferenceError: nonExistentFunction is not defined // Note - error messages will vary depending on browser }
6.filter(),过滤一个数组筛选出符合元素组成一个新数组,不改变原数组,不对空数进行检测;
let arr = [12,20,'',16,88,''] let val = arr.filter((item) => item) console.log(val) //[12,20,16,88]
7.map(),数组中的元素为原始数组元素调用函数处理后的值,不改变原数组,不对空数进行检测;
let arr = [12,20,'',16,88,''] let val = arr.map((item) => Number(item + 1)) console.log(val) //[13, 21, 1, 17, 89, 1]
8.call()、apply()、bind()
function fuc(name,food){ this.name = name || 'Tom'; this.food = food; } function real(name,food){ fuc.call(this,name,food) console.log(`${name}正在吃${food}`) this.yes = 'jia' } new real('Jamy','西瓜')
let obj = { x: 99, getX: function (){ return this.x } } let isX= obj.getX; console.log(isX()) //undefined let isY = isX.bind(obj); console.log(isY()) //99
9.继承方法
注:当谈到继承时,javascript只有一种结构:对象。
每个实例对象都有一个私有属性(称为__proto__ )指向他的构造函数的原型对象(prototype)。
该原型对象也有一个自己的原型对象,层层向上直到一个对象的原型对象为null。
根据定义,null没有原型,并作为原型链的最后一个环节。
父类共用:
function func(){ this.a = 1; this.b = 2; this.add = function(){ return this.a + this.b } }
let pro = new func(); func.prototype.b = 3; func.prototype.c = 5; console.log(pro.add()) //3 console.log(pro.d) //undefined
继承单一,子类无法向父类传值
新实例共享父类实例
function cat(){ func.call(this) this.yes = 'yes' } let pro = new cat();
可以实现多继承,没有继承父类原型属性
无法实现函数的复用,call多了会臃肿,影响性能问题
function pro(name){ let Obj = new func(); Obj.c = 13; return pro; } let obj = new pro();
不支持多类继承,继承父类实例,不是子类实例
function deepCopy (target = {}) { //深拷贝继承 let anyVal = new func(); if (typeof anyVal !== 'object' || anyVal === null) return anyVal; for (let i in anyVal) { const val = anyVal[i]; if (isType('array', val)) { target[i] = deepCopy(val, []) } else if (typeof val === 'object') { target[i] = deepCopy(val); } else { target[i] = val; } } return target; } function isType (type, anyVal) { let newType = type.substring(0, 1).toUpperCase() + type.substring(1); return Object.prototype.toString.call(anyVal) === `[object ${newType}]`; } let obj = new deepCopy()
效率低,内存占用高
function pro(){ func.call(this) this.a = 10 } pro.prototype = new func(); let obj = new pro();
调用了两次父类函数构造,子类构造函数会代替父类构造函数
function pro(){ func.call(this) this.a = 10 } let Obj = function() {}; //创建一个空没有实例的函数 Obj.prototype = func.prototype; pro.prototype = new Obj(); let obj = new pro()
该继承为常用,解决了很多继承的缺点;