前端 知识点-01(js)

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)

splice  slice

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值