0 results found
Utone
总结笔记20190104
2019/01/04 Note JavaScript ES6

lodash 函数

  • _.camelCase([string=’’]):转换字符串为 驼峰写法(小驼峰)
  • _.isNil(value):检查 value 是否是 null 或者 undefined。
  • _.size():返回集合的长度或对象中可枚举属性的个数。
  • _.isPlainObject(): 检查是否是普通对象。 也就是说该对象由 Object 构造函数创建,或者 [[Prototype]] 为 null
  • _.pick(object, *keys) 返回一个只有列入挑选 key 属性的对象
  • _.omit(object, [props]) 反向版的 pick,忽略[props],返回之外的属性
  • _.identity(value) stooge === _.identity(stooge); // true 返回本身
  • _.rest(arguments, 0): ( 默认从 1 位开始),返回 0 位之后的数组

node 全局对象

  • process.cwd()获得当前执行 node 命令时候的文件夹目录名
  • process.execPath 属性,返回启动 Node.js 进程的可执行文件所在的绝对路径/usr/local/bin/node
  • process.argv 属性返回一个数组,数组包含了启动 Node.js 进程时的命令行参数

    $ node process-args.js one two=three four
    /**
        0: /usr/local/bin/node
        1: /Users/mjr/work/node/process-args.js
        2: one
        3: two=three
        4: four
    **/
  • __dirname 获得当前执行文件所在目录的完整目录名

  • __filename 获得当前执行文件的带有完整绝对路径的文件名

Javascript 相关

  • toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。

    // https://www.jianshu.com/p/849b0ae36b36 不可用于高精度运算,金钱运算
    var a = 1.335
    console.log(a.toFixed(2))
    // IE      1.34
    //chorme   1.33
  • Javascript 按位取反运算符 (~)

    // Javascript 按位取反运算符 (~) ,对一个表达式执行位非(求非)运算。
    // 就来看看~1的计算步骤:
    // 将1(这里叫:原码)转二进制 = 00000001 按位取反 = 11111110 发现符号位(即最高位)为1(表示负数),将除符号位之外的其他数字取反 = 10000001 末位加1取其补码 = 10000010 转换回十进制 = -2
    var str = '123456'
    // ~-1 === 0
    if(~str.indexOf(0)){
      console.log('str包含0')
    } else {
      console.log('str不包含0')
    }
  • 面试题实现(a==1 && a==2 && a==3) === true 双等于号

    const a = { value : 0 };
    a.valueOf = function() {
        return this.value += 1;
    };
    
    console.log(a==1 && a==2 && a==3); //true
  • 面试题实现(a===1 && a===2 && a===3) === true 全等

    // window.value
    var value = 0;
    
    // 重写get取值方式
    Object.defineProperty(window, 'a', {
        get: function() {
            return this.value += 1;
        }
    });
    
    console.log(a===1 && a===2 && a===3) // true
  • 利用 es6 函数 reduce,并行执行 promise

    return bizs.reduce((pro, biz) => {
      return pro.then(() => this.copySingleWithObserve(biz))
    }, Promise.resolve())
  • Object.create(null) 与 {} 区别

    • 区别
      1. Object.create(null)不会继承 Object 原型上的任何东西 如没有继承方法 toString(){}创建的新对象会继承所有 Object 的属性
      2. 因为使用 create 创建的没有任何属性 可以自己定义 hasOwnProperty,toString()方法等
    • 为什么用 Object.create(null)
      1. 因为使用 create 创建的没有任何属性 可以自己定义 hasOwnProperty,toString()方法等
      2. for in 循环的时候不会再遍历原型链上的属性 ,使用 create(null)就不会再对属性进行检查了,也可以使用 Object.keys[]
    • 什么时候用 Object.create(null)
      1. 你需要一个非常干净且高度可定制的对象当做数据字典的时候,比如 serverAPI 里的一些变量
      2. 减少 hasOwnProperty 造成的性能损失

require 和 import

  1. require

    • commonJS(适用于服务端,同步加载)
      1. 运行时加载
      2. 拷贝到本页面
      3. 全部引入
      4. 模块写法分 exports 和 module.exports。
    • AMD (适用于客户端,异步加载)

      • AMD 是”Asynchronous Module Definition”的缩写,意思就是”异步模块定义”
        //require([module], callback);
        require(['math'], function (math) {
            math.add(2, 3);
        });
        // 模块写法 dependencies依赖模块
        define(id?, dependencies?, factory)
    • CMD

      • CMD 是”Common Module Definition”的缩写。类似于 requirejs,但是 seajs 是依赖就近,延迟执行,requirejs 是依赖前置,提前执行。
  2. import

    推荐使用 ES6 的 import

    • 编译时加载
    • 只引用定义
    • 按需加载

NodeJS 查看 ES6 支持率

// nodejs 8.0以上支持原生es6方法
$ node -v
v10.13.

npm install -g es-checker
// 安装完毕,运行
es-checke

// 查看当前版本es6原生支持率92%
=========================================
Passes 39 feature Detections
Your runtime supports 92% of ECMAScript 6
=========================================

package.json 中配置版本号

  1. ‘~’: ‘~2.3.1’,则更新’2.3.x’中最新的小版本,不会去更新’2.4.x’
  2. ‘^’: ‘^2.2.2’,则会去找’2.x.x’中最新的,不会去更新’3.x.x’

setTimeout

// setTimeout的一道面试题
for (var i = 0; i < 5; i++) {
  setTimeout(function() {
    console.log(i)
  }, 1000)
} //5,5,5,5,5

为什么会输出 5,5,5,5,5,而不是 0,1,2,3,4,因为 setTimeout 在 for 循环中异步的执行,将输出打印的操作,队列在 for 循环执行完之后。

删除 js 数组中的某个元素

var _arr = ['a', 'b', 'c', 'ALL']
var _str = _arr.join(',')
var _index = _str.indexOf('ALL') // 获取"ALL"的位置
_arr.splice(_index, 1) // 去除该元素(会改变原数组)
console.log(_arr) // ["a", "b", "c"]
请杯咖啡呗~
支付宝
微信
本文作者:Utone
版权声明:本文首发于Utone的博客,转载请注明出处!