阅读 56
JavaScript 回顾(四)

JavaScript 回顾(四)

这是我参与更文挑战的第27天,活动详情查看: 更文挑战

1, 垃圾回收(GC)

就像是人生活的时间长了就会产生垃圾一样,程序运行过程中会产生垃圾,这些垃圾积攒过多以后,会导致程序运行速度过慢,所以我们需要一个垃圾回收机制来处理程序运行过程中产生的垃圾

当一个对象没有任何的变量或属性对它进行引用,此时我们将永远无法操作该对象,此时这种对象就是第一个垃圾, image.png

注意: 在JS中拥有自动的垃圾回收机制,会自动将这些垃圾对象从内存中销毁,我们不需要也不能进行垃圾回收的操作, 我们需要做的只是将不需要的对象设为null

2, 内建对象

(1) 数组

JS中常用的内置对象:Array对象、Date对象、正则表达式对象、string对象、Global对象

(1) 数组

数组也是一个对象,它和我们普通的对象功能类似,是用来存储一些值的

concat()     表示把几个数组合并成一个数组
join()       设置分隔符连接数组元素为一个字符串
pop()       移除数组最后一个元素
shift()      移除数组中第一个元素 
slice(start,end)  返回数组中的一段
splice()      可以用来删除,可以用来插入,也可以用来替换 
push()        往数组中新添加一个元素,返回最新长度
sort()       对数组进行排序
reverse()    反转数组的顺序 
toLocaleString()   把数组转换为本地字符串
array对象属性: 
length        表示取得当前数组长度 (常用)
constructor     引用数组对象的构造函数
prototype     通过增加属性和方法扩展数组定义
复制代码

(2) Global对象

全局属性和函数,可用于所有内建的JavaScript对象

escape()     对字符串编码
eval()       把字符串解析为JavaScript代码并执行
isNaN()      判断一个值是否是NaN 
parseInt()      解析一个字符串并返回一个整数
parseFloat()     解析一个字符串并返回一个浮点数 
number()     把对象的值转换为数字
string()     把对象的值转换为字符串
复制代码

(3) 正则表达式对象

语法 1 
re = /pattern/[flags] 
​
语法 2 
re = new RegExp("pattern",["flags"]) 
re         为将要赋值正则表达式模式的变量名 
pattern      为正则表达式 
flags             为标记:有如下3种
1:g(全文查找) 
2:i(忽略大小写) 
3:m(多行查找) 
复制代码

当预先知道查找字符串时用语法 1。当查找字符串经常变动或不知道时用语法 2,比如由用户输入得到的字符串。

(4) String对象

charAt()          返回指定索引的位置的字符 
indexOf()           从前向后检索字符串,看是否含有指定字符串
lastIndexOf()        从后向前检索字符串,看是否含有指定字符串
concat()          连接两个或多个字符串
match()             使用正则表达式模式对字符串执行查找,并将包含查找结果最为结果返回
replace()         替换一个与正则表达式匹配的子串
search()          检索字符串中与正则表达式匹配的子串。如果没有找到匹配,则返回 -1。 
slice(start,end)     根据下表截取子串 
substring(start,end)   根据下表截取子串 
split()            根据指定分隔符将字符串分割成多个子串,并返回素组
substr(start,length)    根据长度截取字符串 
toUpperCase()       返回一个字符串,该字符串中的所有字母都被转化为大写字母。 
toLowerCase()       返回一个字符串,该字符串中的所有字母都被转化为小写字母。
复制代码

(5) Math对象

ceil()    向上取整。
floor()     向下取整。
round()   四舍五入。
random()  取随机数。
复制代码

3, JS 构造函数

(1) Object.assign()

通过复制一个或多个对象来创建一个新的对象。

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
​
复制代码

(2) Object.create()

使用指定的原型对象和属性创建一个新对象。

const person = {
  isHuman: false,
  printIntroduction: function () {
    console.log('xxx');
  }
};
const me = Object.create(person);
​
复制代码

(3) Object.defineProperties()

给对象添加多个属性并分别指定它们的配置。

方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

var obj = {};
Object.defineProperties(obj, {
  'property1': {
    value: true,
    writable: true
  },
  'property2': {
    value: 'Hello',
    writable: false
  }
})
复制代码

(4) Object.entries()

方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)

const object1 = { foo: 'bar', baz: 42 };
console.log(Object.entries(object1)[1]);
const object2 = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.entries(object2)[2]);
const result = Object.entries(object2).sort((a, b) => a - b);
​
复制代码

(5) Object.freeze()

该方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。

const object1 = {
  property1: 42
};
const object2 = Object.freeze(object1);
 
object2.property1 = 33;
 
console.log(object2.property1)
​
复制代码

(6) Object.is()

该 方法判断两个值是否是[相同的值

Object.is('foo', 'foo');     // true
Object.is(window, window);   // true
 
Object.is('foo', 'bar');     // false
Object.is([], []);           // false
 
var foo = { a: 1 };
var bar = { a: 1 };
Object.is(foo, foo);         // true
Object.is(foo, bar);         // false
 
Object.is(null, null);       // true
 
// 特例
Object.is(0, -0);            // false
Object.is(-0, -0);           // true
Object.is(NaN, 0/0);         // true复制代码

(7) Object.keys()

该方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 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 myObj = Object.create({}, {
  getFoo: {
    value: function () { return this.foo; }
  } 
});
myObj.foo = 1;
console.log(Object.keys(myObj)); // console: ['foo']
复制代码

(8) Object.values()

该方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for...in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。

var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]
 
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.values(obj)); // ['a', 'b', 'c']
 
var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.values(an_obj)); // ['b', 'c', 'a']
 
var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; } } });
my_obj.foo = 'bar';
console.log(Object.values(my_obj)); // ['bar']
console.log(Object.values('foo')); // ['f', 'o', 'o']复制代码
文章分类
前端
文章标签