JS常用静态方法总结

21 篇文章 2 订阅
9 篇文章 1 订阅

JS对象常用静态方法

Object.is()

用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。

不同之处只有两个:一是+0不等于-0,二是NaN等于自身。

+0 === -0 //true
NaN === NaN // false

Object.is(+0, -0) // false
Object.is(NaN, NaN) // true

Object.assign()

Object.assign(newObject,object1,object2,object3...)

用法:

用于对象的合并,将多个对象的所有可枚举属性复制到目标对象。

参数:

newObject:目标对象

object1,object2,object3…:源对象

注意:

  1. 目标对象中如果与源对象有同名属性,后边的属性会覆盖原来的属性。
  2. 该方法是浅克隆,只复制一层,更深层次的对象克隆的是内存地址。
  3. 如果只有一个参数,会直接返回该参数,如果该参数不是对象会转换成对象再返回。undefinednull无法转成对象,所以如果它们作为参数,就会报错。
  4. 如果非对象的参数出现在源对象位置,首先会转换成对象,如果无法转换就会跳过

实际开发常见用途

1.为对象添加属性

let obj = { a:1,b:2,c:3 }
Object.assign(obj, { d:4,e:5 });
// obj {a: 1, b: 2, c: 3, d: 4, e: 5}

2.为对象添加方法

Object.assign(SomeClass.prototype, {
  someMethod(arg1, arg2) {
    ···
  },
  anotherMethod() {
    ···
  }
});

// 等同于下面的写法
SomeClass.prototype.someMethod = function (arg1, arg2) {
  ···
};
SomeClass.prototype.anotherMethod = function () {
  ···
};

3.浅拷贝对象

var obj = {
	a: "LiLei",
    b: {
        a: "LiXiaolei",
        b: 21,
    },
  };
var cloneObj = Object.assign({}, obj);
cloneObj.a = "changed";
cloneObj.b.a = "changed";

console.log(obj.a); //LiLei
console.log(obj.b.a); // "changed"

var obj2 = { a: 1, b: 2, c: 3 };
var cloneObj2 = Object.assign({}, obj2);
cloneObj2.b = 10;
console.log(obj2);
// { a: 1, b: 2, c: 3 }
console.log(cloneObj2);
// { a: 1, b: 10, c: 3 }

可以看到修改cloneObj2.b,原来obj2没有发生变化。

4.合并多个对象

let params = {};
let thisform = { a:1,b:2,c:true };
let userInfo = {userName:"LiMing"};
Object.assign(params, thisform, userInfo);
// params {a: 1, b: 2, c: true, userName: "LiMing"}

Object.keys()

Object.keys(object)

**作用:**返回一个由给定对象的自身(不含继承) 可枚举 (enumerable)属性名组成的数组,数组中属性名的排列顺序和 for...in 循环中的顺序一致。

**参数:**要返回其枚举自身属性名的对象。

**返回值:**一个表示给定对象的所有可枚举属性的字符串数组。

var arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']

var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']

var anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(anObj)); // console: ['2', '7', '100']

var obj = { b: 'b', c: 'c',a: 'a' };
console.log(Object.keys(obj)); // console: ["b", "c", "a"]

Object.values()

ES2017引入了跟Object.keys配套的Object.values和Object.entries,作为遍历一个对象的补充手段,供for…of循环使用。

Object.values()方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历属性的键值,返回数组的成员顺序,与属性的遍历规则一致。

Object.entries()

Object.entries方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。

Object.entries的基本用途是遍历对象的属性,另一个用处是,将对象转为真正的Map结构。

const obj = {foo : "bar", baz : 10};
const map = new Map(Object.entries(obj))
console.log(map);

Object.getOwnPropertyNames(obj)

Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。

Object.getOwnPropertySymbols(obj)

Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名。

数组常用静态方法

Array.from()

用于将两类对象转化为真正的数组:类数组对象,和可遍历的对象(包括ES6新增加的数据结构SetMap

let arrayLike = {
    '0': 'a',
    '1': 'b',
    '2': 'c',
    length: 3
};

// ES5的写法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']

// ES6的写法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
123456789101112

实际开发中,多数用于DOM 操作返回的 NodeList 集合,以及函数内部的arguments对象。

注意:该方法是浅克隆,只复制一层,更深层次的对象克隆的是内存地址。

Array.isArray()

用于判断一个对象是否为数组,如果是返回true,否则返回false

Array.isArray([1, 2, 3]);  
// true
Array.isArray({foo: 123}); 
// false
Array.isArray("foobar");   
// false
Array.isArray(undefined);  
// false

Array.of()

用于将一组数据装进一个数组中。

因为数组构造函数Array()在传入参数个数不同的时候回返回不同的结果,具体返回结果看一下代码。

Array(); 		   // [  ]
Array(7);          // [ , , , , , , ]
Array(1, 2, 3);    // [1, 2, 3]

Array.of(); 	   // [  ]
Array.of(7);       // [7]
Array.of(1, 2, 3); // [1, 2, 3]

Array.of() 方法不存在 Array() 由于参数个数不同而导致的重载,它的行为很稳定,所以一般用前者代替后者。

数值常用静态方法

Number.isFinite(), Number.isNaN()

ES6 在Number对象上,新提供了Number.isFinite()Number.isNaN()两个方法。

Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity

注意,如果参数类型不是数值,Number.isFinite一律返回false

Number.isNaN()用来检查一个值是否为NaN

如果参数类型不是NaNNumber.isNaN一律返回false

它们与传统的全局方法isFinite()isNaN()的区别:

传统方法先调用Number()将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效,

Number.isFinite()对于非数值一律返回false, Number.isNaN()只有对于NaN才返回true,非NaN一律返回false

Number.parseInt(), Number.parseFloat()

ES6 将全局方法parseInt()parseFloat(),移植到Number对象上面,行为完全保持不变。

Number.isInteger()

Number.isInteger()用来判断一个数值是否为整数。

JavaScript 内部,整数和浮点数采用的是同样的储存方法,所以 25 和 25.0 被视为同一个值。

Number.isInteger(25) // true
Number.isInteger(25.1) // false

数学常用静态方法

Math.trunc()

Math.trunc方法用于去除一个数的小数部分,返回整数部分。

Math.trunc = Math.trunc || function(x) {
  return x < 0 ? Math.ceil(x) : Math.floor(x);
};

Math.sign()

Math.sign方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。

它会返回五种值。

  • 参数为正数,返回+1
  • 参数为负数,返回-1
  • 参数为 0,返回0
  • 参数为-0,返回-0;
  • 其他值,返回NaN
Math.sign(-5) // -1
Math.sign(5) // +1
Math.sign(0) // +0
Math.sign(-0) // -0
Math.sign(NaN) // NaN

如果参数是非数值,会自动转为数值。对于那些无法转为数值的值,会返回NaN

Math.sign = Math.sign || function(x) {
  x = +x; // convert to a number
  if (x === 0 || isNaN(x)) {
    return x;
  }
  return x > 0 ? 1 : -1;
};

常用计算静态方法

1)PI 取圆周率
2)abs() 取绝对值
3)ceil() 向上取整
4)floor() 向下取整
5)round() 四舍五入
6)max() 取最大值
7)min() 取最小值
8)pow() 取X的y次幂
9)random() 取随机数 >=0 <1

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
在Node.js中,可以使用`express`框架来定义静态方法。`express`是一个常用的Web框架,可以帮助我们快速构建Node.js应用程序。在`express`中,通过使用`express.static`中间件来定义静态方法。 首先,需要在项目中安装`express`模块,可以通过运行以下命令来进行安装: ``` npm install express ``` 接下来,在项目的入口文件中,引入`express`模块,并创建一个`express`实例: ```javascript const express = require('express'); const app = express(); ``` 然后,可以使用`express.static`中间件来定义静态目录的路径。静态目录中的文件将可以直接被访问,而不需要经过额外的处理。可以将以下代码添加到项目中: ```javascript app.use(express.static('public')); ``` 上述代码将`public`目录下的所有文件都设置为静态资源。其中,`public`是你存放静态文件的目录名称,可以根据自己的需求进行修改。 最后,启动服务器并监听指定的端口。可以添加以下代码以启动服务器: ```javascript const port = 3000; // 你可以根据自己的需求修改端口号 app.listen(port, () => { console.log(`Server is listening on port ${port}`); }); ``` 现在,静态资源服务器已经成功搭建好了。你可以将静态文件放置在`public`目录下,并通过访问`http://localhost:3000/文件名`来访问这些文件。 总结一下,定义Node.js静态方法可以通过使用`express`框架中的`express.static`中间件来实现。首先安装`express`模块,然后在项目入口文件中引入`express`并创建一个`express`实例。接着,使用`app.use(express.static('public'))`来定义静态目录的路径。最后,启动服务器并监听指定的端口。这样,静态资源服务器就搭建完成了。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [使用Node.js搭建静态资源服务详细教程](https://download.csdn.net/download/weixin_38535848/14006744)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [基于Node.js的高并发电商购物系统设计与实现](https://download.csdn.net/download/weixin_47367099/85249462)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉沦与遐想。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值