Great Deng的博客 Great Deng的博客
首页
  • 代码片段
  • 学习笔记

    • JavaScript笔记
  • MQ

    • 常见面试题
  • VuePress
更多
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Great Deng

有志者事竟成
首页
  • 代码片段
  • 学习笔记

    • JavaScript笔记
  • MQ

    • 常见面试题
  • VuePress
更多
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 语法
    • 1.基础操作
    • 2.高级操作
      • 数字操作
      • 小数加减法
      • 对象浅拷贝
      • 对象深拷贝
      • 数组浅拷贝
      • 数组深拷贝(同对象深拷贝)
      • js 获取字符串所占字节数 (UTF-8编码)
      • Promise.then()链式调用
      • module.exports和exports和export和export default的区别,import和require的区别
  • JavaScript笔记
Great Deng
2021-10-27
目录

语法

# javascript 语法

# 1.基础操作

undefined == null          // true
1

# 2.高级操作

# 数字操作

# 小数加减法
  1. 先乘后加再除
  2. 1.1.toFixed(2) 不会四舍五入,还有兼容性问题
  3. 小数和整数分别计算

# 对象浅拷贝

对象的合并 Object.assign(),第一个参数必须是个空对象

var obj1 = {a: 1, b: 2};
var obj2 = Object.assign({}, obj1);
1
2

对象的解构赋值

var obj1 = {a: 1, b: 2};
var obj2 = {...obj1};
1
2

# 对象深拷贝

利用jQuery的$.extend方法





 

//第一个参数不传(false是不能够显示的写出来的)默认为false,是浅拷贝。传true为深拷贝。
$.extend(true,object1, object2)

//newObject 即为深拷贝出来的对象
var newObject = $.extend(true , {} , object);
1
2
3
4
5

通过js的内置对象JSON来进行数组对象的深拷贝

这种简单粗暴的方法有其局限性,当值为undefined、function、symbol 会在转换过程中被忽略

function deepClone(obj) {
  var _obj = JSON.stringify(obj),
    objClone = JSON.parse(_obj);
  return objClone;
}
1
2
3
4
5

数组或对象深拷贝(利用循环和递归)

function deepClone(obj, newObj) {
    var newObj = newObj || {};
    for (key in obj) {
        if (typeof obj[key] == 'object') {
            newObj[key] = (obj[key].constructor === Array) ? [] : {}
            deepClone(obj[key], newObj[key]);
        } else {
            newObj[key] = obj[key]
        }
    }
    return newObj;
}
1
2
3
4
5
6
7
8
9
10
11
12

# 数组浅拷贝

利用数组的 slice 方法或者 concat 方法

var arr1 = ["aaa","bbb","ccc"];
var arr2 = arr1.slice(0);
arr2[0] = "ddd";
var arr1 = ["aaa","bbb","ccc"];
var arr2 = arr1.concat();
arr2[0] = "ddd";
1
2
3
4
5
6

# 数组深拷贝(同对象深拷贝)

# js 获取字符串所占字节数 (UTF-8编码)

let getStrBytes = function (str) {
     if (str == null || str === undefined) return 0;
     if (typeof str != "string") {
         return 0;
     }
     var total = 0, charCode, i, len;
     for (i = 0, len = str.length; i < len; i++) {
         charCode = str.charCodeAt(i);
         if (charCode <= 0x007f) {
             total += 1;//字符代码在000000 – 00007F之间的,用一个字节编码
         } else if (charCode <= 0x07ff) {
             total += 2;//000080 – 0007FF之间的字符用两个字节
         } else if (charCode <= 0xffff) {
             total += 3;//000800 – 00D7FF 和 00E000 – 00FFFF之间的用三个字节,注: Unicode在范围 D800-DFFF 中不存在任何字符
         } else {
             total += 4;//010000 – 10FFFF之间的用4个字节
         }
     }
     return total;
 };
 console.log(getStrBytes("js 获取字符串所占字节数 (UTF-8编码)"))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# Promise.then()链式调用

  • 当执行 then 方法时,如果前面的 promise 已经是 resolved 状态,则直接将回调放入微任务队列中
  • 当一个 promise 被 resolve 时,会遍历之前通过 then 给这个 promise 注册的所有回调,将它们依次放入微任务队列中
new Promise(function(resolve, reject){
    //异步调用成功
    resolve(传递给then的参数);
    //异步调用失败
    reject(传递给catch的参数);
}).then(function(resolve传递过来的参数){
    return new Promise(function(resolve, reject){
        //异步调用成功
        resolve(传递给then的参数);
        //异步调用失败
        reject(传递给catch的参数);
    });
}).then(function(resolve传递过来的参数){
    return new Promise(function(resolve, reject){
        //异步调用成功
        resolve(传递给then的参数);
        //异步调用失败
        reject(传递给catch的参数);
    });
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# module.exports和exports和export和export default的区别,import和require的区别

module.exports和exports一开始是同一个对象,如果只是给他们添加属性,那就是相同的。但是如果分别给他们赋了不同的对象将导致不同,require导入使用的是module.exports。

导出时

  • export相当于把对象添加到module的exports中。
  • {exports: {aunt:{age:25,name:'AuntFirefly'},uncle:{age:25,name:'UncleFirefly'}, hot:{...}}
  • export default相当于把对象添加到module的exports中,并且对象的key叫default。
  • {exports: {default:{age:25,name:'UncleFirefly'}, hot:{...}}

导入时:

  • 不带{}的导入

本质上就是导入exports中的default属性(注:如果default属性不存在,则导入exports对象)。

  • 带{}的导入

本质上按照属性key值导入exports中对应的属性值。

编辑 (opens new window)
#javascript
上次更新: 2026/02/06, 03:37:18
最近更新
01
推荐书籍
02-06
02
推荐书籍
02-06
03
常见面试题
02-04
更多文章>
Theme by Vdoing | Copyright © 2026-2026 Great Deng
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式