var let const 区别
1. var 声明提升(赋值不提升),作用域为该语句所在的函数内,可重复声明相同名称的变量;
2. let 不存在声明提升,作用域为该语句所在的代码块内,不可重复声明相同名称的变量,可修改变量的值;
3. const 不存在声明提升,作用域为该语句所在的代码块内,不可重复声明相同名称的变量,不可修改变量的值;
变量提升:
作用域:
判断是数组还是对象
Object.prototype.toString.call(a)
a instanceof xxx (返回值:布尔值) 可以判断是否为数组,但是不可以判断是数组还是对象:
typeof a (返回值:字符串) ,同样也不能判断是数组还是对象:
Array.isArray(a) 可以判断是否为数组:
闭包
能够读取其他函数内部变量的函数。也就是说,当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。
特点:
1. 让外部访问函数内部变量成为可能;
2. 局部变量会常驻在内存中;
3. 可以避免使用全局变量,防止全局变量污染;
4. 会造成内存泄漏(有一块内存空间被长期占用,而不被释放)
// 作为返回值
function create () {
var a = 100
return function fn () {
console.log(a)
}
}
var a = 200
create()() // 100
// 作为参数
function create2 (fn) {
var a = 100
return fn()
}
var a = 200
function fn () {
console.log(a)
}
create2(fn) // 200
闭包和垃圾回收机制 - 牧羊狼 - 博客园闭包就是有权限访问 其他函数作用域的局部变量的 一个函数 在JS中,变量的作用域属于函数作用域,在函数执行后作用域就会被清理、内存也随之被收回,但是由于闭包时建立在一个函数内部的子函数,由于
https://www.cnblogs.com/edwardwzw/p/11754101.html
hasOwnProperty
hasOwnProperty() 用来检测属性是否为对象的自有属性,返回 true/false
let obj = {
name:'edward',
age:18,
eat:{
eatname:'肉',
water:{
watername:'营养快线'
}
}
}
console.log(obj.eat.hasOwnProperty('watername')) //false
console.log(obj.eat.water.hasOwnProperty('watername')) //true
深拷贝
1. JSON.parse(JSON.stringify(obj))
2.
function deepClone (source) {
const targetObj = source.constructor === Array ? [] : {}
for (let key in source) {
if (source.hasOwnProperty(key)) {
if (source[key] && typeof source[key] === 'object') { // 引用数据类型
targetObj[key] = deepClone(source[key])
} else { // 基本数据类型
targetObj[key] = source[key]
}
}
}
return targetObj
}
apply call bind
var name = '小王', age = 18
var obj = {
name: '小明',
objAge: this.age,
myFun: function (a,b) {
console.log(this.name, this.age, a, b)
}
}
var obj1 = {
name: 'xiao li',
age: 6
}
var obj2 = {
name: 'edward',
age: 9
}
obj.myFun.apply(obj1, ['aaa', 'bbb']) // xiao li 6 aaa bbb
obj.myFun.call(obj2, 'aaa', 'bbb') // edward 9 aaa bbb
obj.myFun.bind(obj1, 'ccc', 'ddd')() // xiao li 6 ccc ddd
数组 API
(数组字符串都可以用) (改变原来数组)
shift unshift pop push (shift pop 返回值为删除的元素,unshift push返回值为新的数组的长度)
every some includes indexOf
join concat
slice splice
reverse sort
map forEach
find filter
reduce flat(Infinity)