这是我以前写的文章,如果错误,请指正,谢谢!
最近重新把红宝书拾起来复习了下,发现了好多遗忘的和遗漏的知识点,在这里总结一下我发现的自己忽略的知识点,希望能够和大家一起进步:)
引用类型
Object
对象类型转换
对象类型的变量,在被转为数值类型时,例如Number(Obj)
或者进行对比判断如==
的时候,会先调用对象的 valueOf 方法,如果 valueOf 方法不存在的话,则会调用 toString 方法,然后把调用得到的结果转换为数值,举个例子:
const obj = {
a: 1,
valueOf: function() {
return 2;
},
toString: function() {
return 3;
}
};
console.log(Number(obj)); // 2
console.log(obj == 2); // true
const obj = {
a: 1,
toString: function() {
return 3;
}
};
console.log(Number(obj)); // 3
console.log(obj == 3); // true
但是要注意的是,使用===
来判断是无法通过的,因为会判断左端和右端的类型是否相同。
Array
length属性
数组的length属性表示数组的有多少项,这个属性是可以修改的,通过设置这个属性能够在数组的末尾移出或者添加项,举个例子:
const array = [1, 2, 3, 4, 5, 6];
console.log(array.length); // 6
array.length = 3;
console.log(array); // [1, 2, 3]
array.length = 5;
console.log(array); // [1, 2, 3, , ]
减少length可以移除数组末尾的项,而增加 length 会在数组末尾添加空数组项。
判断是否是数组
判断一个数组是数组的方法:array instanceof Array
扩展:在ES6中,可以使用Array.isArray(array)方法来判断
Array重写的方法
valueOf:返回数组自身; toString:
- 数组的每一项调用toString()方法;
- 得到的各个结果用逗号分隔生成新的字符串返回;
toLocaleString:数组的每一项调用 toLocaleString 方法,其他的和 toSting 一样 join:
- 数组的每一项调用 toString 方法;
- 传入的参数调用 toString 方法;
- 1得到的结果用2得到的结果来分隔;
- 不传参数或者传入的参数如果是 undefined,则用默认的逗号来分隔;
- 传入的参数如果是 null,用 null 的字符串来分隔;
- 不能传入 Symbol 类型的数据作为参数,否则会报错;
值得注意的是,如果数组的某一项如果是null或者undefined,那么在调用上述的 toString、toLocaleString、join 方法时会被当总空数组项来处理。
splice方法
array.splice(start, length, ...otherArguments)
删除或者添加数组项
- start: 开始操作的数组项下标;
- length:需要删除的数组项个数,从 start 位置开始删除,返回的结果为删除的数组项组成的新数组;
- otherArguments:需要插入的新的数组项,从第三个参数开始,会在 start 位置依次插入传入的参数,原本 start 位置的数组项会被往后推移; 需要注意的是,splice 方法会修改原来的数组,不是一个函数式的方法,举个例子:
const array = ["a", "b", "c", "d", "e", "f"];
const newArr = array.splice(1, 2);
console.log(newArr); // ["b", "c"]
console.log(array); // ["a", "d", "e", "f"]
array.splice(2, 1, 2, ["a"]);
console.log(array); // ["a", "d", "e", 1, 2, ["a"], "f"]
基本包装类型
- 基本类型的值调用方法的过程,以
"this is a string".subString()
为例子:
const str1 = String("this is a string"); // 创建一个String类型的实例
const str2 = str1.subString(); // 调用指定方法
str1 = null; // 销毁实例
- 使用Object构造函数创建实例时,会根据传入的值返回相应的基本包装类型的实例,举个例子:
const str = Object("123");
console.log(str instanceof String); //true
const num = Object(123);
console.log(num instanceof Number); // true
- 如果使用 new 调用 String 等构造函数来创建实例,那么这个实例的数据类型就是"object",举个例子:
const str = new String("str");
console.log(typeof str); // "object"
console.log(str instanceof String); // true
Boolean
- new Boolean创建实例是引用类型的Boolean值;
- valueOf:返回布尔值 true 或者 false ;
- toString:返回字符串形式的 "true" 或者 "false";
String
- new String方式创建的实例是引用类型的String值;
- valueOf、toString、toLocaleString 返回基本数值类型的字符串;
- length 属性:表示这个引用类型的字符串是由多少个字符组成的;
- chartAt:接收一个数值参数;如果参数是能够成功转换为数值,则返回参数所在位置的字符,否则返回第一个字符,举个例子:
const str = new String("this is a string");
console.log(str.charAt(1)); // "h"
console.log(str.charAt("1")); // "h"
console.log(str.charAt("a")); // "t"
- chartCodeAt:逻辑和 chartAt相同,返回值为得到的字符的字符编码(ASCII 码);
- concat:将2个或多个字符串合并后返回新的基本数值类型的字符串,这个方法不会改变原有字符串,举个例子:
const str = new String("str");
console.log(str.concat("aaa", "bbb")); // "straaabbb"
console.log(str); // String {"str"}
-
slice、substring、substr:截取原有字符串的一部分,生成新的字符串;
-
slice:
- 第一个参数表示开始截取的位置;
- 第二个参数表示结束位置,不会被截取到;
- 如果参数是负数,将参数和字符串的长度相加之后再使用;
-
substring:
- 参数和 slice 方法一样;
- 如果参数是负数,将参数转换为0后再使用;
-
substr:
- 第一个参数表示开始位置;
- 第二个参数表示要截取的字符长度;
- 如果参数是负数,第一个参数会和字符串长度相加,第二个参数会转换为0,然后再使用参数;
-
indexOf 和 lastIndexOf 方法查找的时候使用的是
===
,并且这两个方法的第二个参数表示从字符串的第几个位置开始查找; -
indexOf:从前往后搜索,返回所传参数在字符串中的第一个位置,不存在返回-1;
-
lastIndexOf:从后往前搜索,返回所传参数在字符串中的第一个位置,不存在返回-1;
-
trim:删除字符串两端的空格,返回新的字符串;
-
localeCompare:比较两个字符串在字母表中的位置,返回结果会随着国家和地区变化;
- 如果参数在字符串之前,返回正数;
- 如果相等,返回0;
- 如果参数在字符串之后,返回负数 ;
-
fromChartCode:根据字符编码返回字符串
Number
- new Number 创建实例是引用类型的Number值
- valueOf:返回基本类型值的数值;
- toString 和 toLocaleString:返回字符串形式的数值;可以传入一个参数,表示要返回几进制数职的字符串形式;
- toFixed:按照指定的小数位返回数值的字符串形式,按标准能够返回0-20位的小数;
- toExponential:格式化数值,返回指数表示法的字符串形式的数字,举个例子:
const num = new Number(12345);
console.log(num.toExponential(2)); // 1.23e+4
- toPrecision:
- 接受一个参数,返回字符串形式的数值;
- 参数表示要返回的数值的位数;
- 按标准可以返回1-21位小数
感谢阅读,个人成果,请勿转载:)