这是我参与更文挑战的第27天,活动详情查看: 更文挑战
1, 垃圾回收(GC)
就像是人生活的时间长了就会产生垃圾一样,程序运行过程中会产生垃圾,这些垃圾积攒过多以后,会导致程序运行速度过慢,所以我们需要一个垃圾回收机制来处理程序运行过程中产生的垃圾
当一个对象没有任何的变量或属性对它进行引用,此时我们将永远无法操作该对象,此时这种对象就是第一个垃圾,
注意: 在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']