javaScript 随手笔记

71 阅读2分钟
  1. 数组调用 toStringjoin一样) 方法时,数组中每个元素都会调用自身的toString方法
const a = {
    toString: function() {
        return '111'
    }
}

const b= {
    toString: function() {
        return '222'
    }
}

const arr = [a, b]
console.log(arr.join()) // 111,222
  1. 关键字label(不常用),通常用于嵌套循环
// label: statement
task: for(i;;;) {
    for(j;;;) {
        if (bool) {
            // continue task 会跳出task这个任务循环,即直接进入下一个 i++
            break task 停止task循环,之后不再进行本循环
        }
    }
}
  1. 垃圾回收机制

    分为标记清除法和引用计数法

    a. 标记清除法

    将进入环境的变量打上标记,垃圾回收机制会清除环境中的变量以及被变量引用的变量的标记,之后再次被标记的变量会被清除。

    b. 引用计数法(不常用, IE的COM对象仍在使用该方法)

    记录跟踪每一个值被引用的次数,当引用次数为0时,该变量就会被回收。

    会有一个问题:两个变量间相互引用会导致这两个变量无法被回收。

  2. 不同类型变量比较

    变量运算

    基本变量和字符串运算时,都会转为字符串类型

    bool类型和数字运算时,false会转为0,true会转为1然后运算

    null、undefined和数字运算时,这两个类型都会转为0

    基本类型和引用类型运算时,引用类型首先会调用自身的 valueOf方法,如果不存在,则会调用 toString方法,然后再回到上面的逻辑

  const a = {
    valueOf: function () {
        return 1
    }
  }
  
  const c = {
    toString: () => {
        return 11
    }
  }
  
  const b = {}
  
  const arr = [1, 2]
  
 console.log(1 + '1') // 11
 console.log(a + '1') // 11
 console.log(b + '1') // [object Object]1
 console.log(a + '1') // 111
 console.log(arr + '1') // 1,21
 
 console.log(false + 1) // 1
 console.log(true + 1) // 2
 console.log(null + 1) // 1
 console.log(undefined + 1) // 1
  1. 数组方法sort使用

    不传参数:数组中的每个元素调用 toString 方法,然后每个比较每个元素的第一个字符的ASCII码值

    传参数: (常用:a-b 升序, b-a 降序)

// 当a - b < 0 时, a会排在b的前面
// 当a - b = 0 时, a,b位置不变
// 当a - b > 0 时, a会排在b的后面
arr.sort((a,b) => a-b) 
  1. 基本类型在非必要的情况下不要用构造函数创建(new),创建实例对象之后在进行类型判断时结果会显示为对象而不是基本类型,会导致理解代码时出现歧义

  2. setTimeout第二个参数 delay 是有范围的,最大延迟时间约等于 24天

  3. 数字千分法:

function toThousands(num) {  
return (num || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,');  
}