美文网首页
JS大杂烩

JS大杂烩

作者: 小艾咪 | 来源:发表于2021-01-15 20:56 被阅读0次

JS大杂烩

记录自己总是记不住的那些函数用法,和使用规则。

数组篇

遍历

for循环遍历

var arr = [1, 2, 3, 4, 5]
for (let i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}

forEach()遍历

forEach回调内接收三个参数,依次为当前元素,当前元素索引,被遍历数组本身

var arr = [1, 2, 3, 4, 5]
arr.forEach((item,index,self)=>{
    console.log(item,index,self);
})

说明:forEach不支持breakcontinue即使是return也只是结束当前回调并不会结束forEach()

删除

删除指定元素

删除指定元素需要先确定被删除元素位置即调用indexOf()函数或缺被删除元素的位置,然后使用slpice()删除该元素。

splice()函数的作用是向数组指定位置添加一个或多个元素,添加的元素会覆盖原位置的元素,所以当不指定添加元素时可用来删除元素。

var arr = [1, 2, 3, 4, 5]
let index = arr.indexOf(4)
arr.splice(index,1)
console.log(arr);

说明:splice()会改变原数组内容,并且在vue中不会触发ui刷新

过滤

过滤数组元素

过滤使用filter()函数

var arr = [1, 2, 3, 4, 5]
var res = arr.filter(item=>{
    return item>3
})
console.log(res);

排序

数组排序

JS数组排序是按照数组内元素的Unicode码来排序的,排序方法是sort()

var arr=[1,4,2,6,3,6,7]
arr.sort()
console.log(arr);
//result (7) [1, 2, 3, 4, 6, 6, 7]

如果排序元素为对象则调用其toString()方法进行排序。

//首先重写toString()方法以按照我们的意愿进行排序
function Person(name){
    this.name=name
    this.toString=function(){
        return this.name
    }
}
var arr=[new Person("C"),new Person("A"),new Person("B"),new Person("D")]
arr.sort()
console.log(arr);
//result (4) [Person, Person, Person, Person]
//      0: Person {name: "A", toString: ƒ}
//      1: Person {name: "B", toString: ƒ}
//      2: Person {name: "C", toString: ƒ}
//      3: Person {name: "D", toString: ƒ}

sort()函数还可以接收一个函数类型参数作为排序依据。但是返回值并不是true/false而是-1/0/1

function Person(name) {
    this.name = name
}
var arr = [new Person("C"), new Person("A"), new Person("B"), new Person("D")]
arr.sort((a, b) => {
    if (a.name > b.name) {
        return 1
    } else if (a.name < b.name) {
        return -1
    } else {
        return 0
    }
})
console.log(arr);
//result(4) [Person, Person, Person, Person]
//      0: Person {name: "A"}
//      1: Person {name: "B"}
//      2: Person {name: "C"}
//      3: Person {name: "D"}

原型篇

JS中每个对象都有一个__proto__属性(Object对象的__proto__属性=null),它指向另一个对象,可已从当前对象中直接调用__proto__所指对象的属性和方法。

JS通过原型链来实现面向对象编程思想中的继承关系。还有一个重要概念prototype __proto__prototype 在某些情况下这两个参数会等于同一对象。通常情况下__proto__针对实例来说,而prototype 针对类来说。

所有显示创建的对象的__proto__都是Object,通过new关键字创建的__proto__是创建该实例的构造函数的prototype(在JS中函数也可是对象)。

var student = {
    name:"wxm",
    age:18
}
function Person(name,age){
    this.name=name
    this.age=age
}
var person = new Person("wxm",18)

//上文说过Object的.__proto__=null,证明显示创建的对象的__proto__为Object
console.log(student.__proto__.__proto__); //result null
//证明通过new关键字创建的实例的__proto__是创建该实例的构造函数的prototype
console.log(person.__proto__ == Person.prototype); //result true

Promise篇

Promise 是一个对象,它代表了一个异步操作的最终完成或者失败。能够解决传统JS异步编程中回调地狱的问题。

创建Promise对象

创建一个Promise对象并为其提供一个函数类型的参数,创建后该函数参数立即执行。

var promise = new Promise((resolve,reject)=>{
    console.log("Promise creating");
})
//result: Promise creating

Promise.then()的使用

Promise创建后调用then([successCallBack],[failCallback])为异步操作设置回调函数,该方法接收两个参数,第一个参数为异步操作成功的回调,第二个为异步操作失败的回调,并且这连个参数都是可选参数。

//异步操作成功演示
var promise = new Promise((resolve, reject) => {
    console.log("Promise creating");
    setTimeout(() => {
        console.log("Already time out");
        resolve()
    }, 3000)
})
promise.then(
    () => {
        console.log("Success function has been executed");
    },
    () => {
        console.log("Fail function has been executed");
    })
//result:   Promise creating
//          Already time out
//          Success function has been executed
//异步操作失败演示
var promise = new Promise((resolve, reject) => {
    console.log("Promise creating");
    setTimeout(() => {
        console.log("Already time out");
        // resolve()
        reject()
    }, 3000)
})
promise.then(
    () => {
        console.log("Success function has been executed");
    },
    () => {
        console.log("Fail function has been executed");
    })
//result:   Promise creating
//          Already time out
//          Fail function has been executed

关于then()中的回调函数的说明

一下内容节选自链接

当一个Promise完成(fulfilled)或者失败(rejected)时,返回函数将被异步调用(由当前的线程循环来调度完成)。具体的返回值依据以下规则返回。如果 then 中的回调函数:

  • 返回了一个值,那么 then 返回的 Promise 将会成为接受状态,并且将返回的值作为接受状态的回调函数的参数值。
  • 没有返回任何值,那么 then 返回的 Promise 将会成为接受状态,并且该接受状态的回调函数的参数值为 undefined
  • 抛出一个错误,那么 then 返回的 Promise 将会成为拒绝状态,并且将抛出的错误作为拒绝状态的回调函数的参数值。
  • 返回一个已经是接受状态的 Promise,那么 then 返回的 Promise 也会成为接受状态,并且将那个 Promise 的接受状态的回调函数的参数值作为该被返回的Promise的接受状态回调函数的参数值。
  • 返回一个已经是拒绝状态的 Promise,那么 then 返回的 Promise 也会成为拒绝状态,并且将那个 Promise 的拒绝状态的回调函数的参数值作为该被返回的Promise的拒绝状态回调函数的参数值。
  • 返回一个未定状态(pending)的 Promise,那么 then 返回 Promise 的状态也是未定的,并且它的终态与那个 Promise 的终态相同;同时,它变为终态时调用的回调函数参数与那个 Promise 变为终态时的回调函数的参数是相同的。
//针对上文做部分验证。
var promise = new Promise((resolve, reject) => {
    console.log("Promise creating");
    resolve()
})
function firstChain(){
    console.log("链式第一链,running");
    return "第一链"
}
function secondChain(param){
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log("第二链Promise异步执行完成");
            param+="+第二链"
            console.log(param);
            resolve(param)
        }, 1000)
    })
}
function thridChain(param){
    console.log("链式调用最后一链,running");
    param+="+第三链"
    console.log(param);
}
promise
    .then(firstChain)
    .then(secondChain)
    .then(thridChain)
//result:   Promise creating
//          链式第一链,running
//          第二链Promise异步执行完成
//          第一链+第二链
//          链式调用最后一链,running
//          第一链+第二链+第三链

待补充

//----------------------------------

最后


大幻梦森罗万象狂气断罪眼\ (•◡•) /

相关文章

  • 乱斗大杂烩目录

    乱斗大杂烩(1)乱斗大杂烩(2)

  • 乱斗大杂烩(2)

    乱斗大杂烩目录 (2) 上一话 乱斗大杂烩(1)待续...

  • 我的菜谱

    大杂烩

  • 学霸校园

    (注意大杂烩)

  • 新手大全

    IDA使用大杂烩

  • 大杂烩啊大杂烩

    今天看了部电影驴得水,剧情真的叫一个跌宕起伏,就用肤浅的思维把它的立意理解为对教育的深思吧。我自己就是未来的人民教...

  • 美食日记|大杂烩

    图文|武姿仙居 大杂烩并不好吃,NO NO NO ~大杂烩也能很美味。 猜猜我这里都有什么? 猪肉片,胡萝卜,娃娃...

  • 大杂烩

    今天一到办公室,美美姐姐就问我这段时间做的思维导图是怎么做的,后来干脆让我去他们班上上了一堂随堂课。我啥也没...

  • 大杂烩

    意志力训练。我讲东西有个要求:道理要讲到本质、工具要简单易用,这个意志力训练也是一样,非常简单,只需要每天做一件事...

  • 大杂烩

    临摹打卡~23 一到放假就变懒,没得救了,就不到啦(๑✧∀✧๑) 唉,今天画画有点浮躁,没有静下来,画的都不知道说...

网友评论

      本文标题:JS大杂烩

      本文链接:https://www.haomeiwen.com/subject/celwaktx.html