JavaScript 语言精粹六
年年有风 风吹年年 慢慢即漫漫 —— 夏吉尔硕
起步:
本章节为上章节补充,上个章节以数组为主题,介绍数组的常用方法集,👉查看数组
本章节用于简单描述 JavaScript 中数组以外的数据类型的常用方法集。
Number
number.toExponential(fractionDigits)
-
toExponential方法是把数字类型转化为指数形字符串 -
fractionDigits可选 20 以内小数位数 -
例如:
var nums = 1024;
var trs = nums.toExponential(3);
console.log(trs); // 1.024e+3--->1.024*10的3次方
number.toFixed(fractionDigits)
-
toFixed方法是把数字类型转化为十进制形字符串 -
fractionDigits可选 20 以内小数位数 -
例如:
var nums = Math.PI;
var trs = nums.toFixed(3);
console.log(trs); //3.142
number.toPrecision(precision)
toPrecision方法是把数字类型转化为十进制数形式的字符串precision可选 21 以内数字总数- 例如:
var nums = Math.PI;
var trs = nums.toPrecision(3);
console.log(trs); // 3.14
number.toString(radix)
toString方法是把数字类型转化为字符串radix控制基数, 可选 2-36 以内,默认为 10- 也可简写成
String(number) - 例如:
var nums = 1024,
nums2 = 9,
nums3 = 125;
var trs = nums.toString(2);
var trs2 = nums2.toString(2);
var trs3 = nums2.toString(5);
console.log(trs); // 10000000000-->1*2的10次方
console.log(trs2); //1001
console.log(trs3); //1000
Function
function.apply(this.Ary , argArray)
-
apply方法是调用function,传递一个会绑定到this上的对象和一个可选数组作为参数 -
apply方法被用在apply调用模式(apply invocation pattern)中 -
例如:
Function.prototype.fakeBind = function (that) {
var method = this,
slice = Array.prototype.slice,
args = slice.apply(arguments, [1]);
return function () {
return method.apply(that, args.concat(slice.apply(arguments, [0])));
};
};
var test = function () {
return this.value;
}.fakeBind({ value: 233 });
console.log(test()); // 233
Object
object.hasOwnProperty(name)
hasOwnProperty方法是对调用此方法的对象身上的属性进行检查- 若
object包含一个名为name的属性,则此方法返回 true - 注:此方法只会检查当前对象,不会进行原型链上属性检查
var list = {
name: "poo",
gender: "boy",
};
Object.prototype.list = list;
var test = new Object();
console.log(list.hasOwnProperty("name")); // true
console.log(test.hasOwnProperty("name")); // false
console.log(test.list.name); // poo
String
string.charAt(pos)
charAt方法返回在string中pos位置处的字符- 若
pos小于 0 或者不在字符串长度范围内,则返回空字符串 - 注:
JavaScript无字符类型,所以此方法返回结果为字符串
let type = "food";
var pick = type.charAt(3); // d
/** 实现原理 */
String.prototype.fakeCharAt = function (pos) {
return this.slice(pos, pos + 1);
};
var ahh = "yaHoo";
let pick = ahh.fakeCharAt(2); // H
console.log(typeof pick); // string
string.charCodeAt(pos)
charCodeAt与charAt相似,返回的是string中pos位置处的字符码位- 若
pos小于 0 或者不在字符串长度范围内,则返回NaN
let type = "food";
var pick = type.charCodeAt(3); // 100
console.log(typeof pick); // number
string.concat(string...)
concat方法用于进行字符串拼接,且构造出新字符串- 注:
concat性能和使用便捷性都不如直接使用运算符+,因此几乎不用
let name = "iPhone ";
let add = "Plus ";
var pick = name.concat(add); // iPhone Plus
/** 猜测实现原理 */
String.prototype.fakeConcat = function (add) {
return this + add;
};
let name = "tomato";
var xxx = name.fakeConcat(" Plus"); // tomato Plus
string.indexOf(searchString , position)
indexOf方法用于在当前字符串中查找另一个字符串searchString- 找到则返回匹配字符串的位置,否则返回 -1
position为可选参数,可指定查找起始位置
let str = "xipengheng";
let pick1 = str.indexOf("eng"); // 3
let pick2 = str.indexOf("ning"); // -1
let pick3 = str.indexOf("eng", 4); // 7
string.lastIndexOf(searchString , position)
lastIndexOf与indexOf相同,不过它是倒序查找自定字符串- 找到则返回匹配字符串的位置,否则返回 -1
position为可选参数,可指定查找起始位置
let str = "xipengheng";
let pick1 = str.lastIndexOf("eng"); // 7
let pick2 = str.lastIndexOf("ning"); // -1
let pick3 = str.lastIndexOf("eng", 4); // 3
string.localeCompare(that)
localeCompare方法是比较两个字符串- 若当前字符串小于
that则为负,相等为0 - 注:这方法没啥规则,也没啥用途,没学习的必要
string.replace(searchValue , replaceValue)
replace方法会对searchVale进行查找,并且使用replaceVale替换- 注:只会替换首次出现的搜索词组,且返回的是一个新字符串
let str = "xipengheng";
let newStr = str.replace("eng", "a"); // xipaheng
- 此方法也可与正则组合,根据需要替换一个或多个字符
let str = "xipengheng";
let reg = /eng/;
let regGlobal = /eng/g;
let newStr = str.replace(reg, "a"); // xipaheng
let gloStr = str.replace(regGlobal, "a"); // xipaha
string.search( regexp)
search方法类似于indexOf方法,但它只接受一个正则对象- 找到则返回首个匹配的字符位置,否则返回 -1
- 此方法会自动忽略全局标识符号
g,且没有position参数
let str = "i miss you,and you ?";
let reg = /you/;
let regGlobal = /you/g;
let newStr = str.search(reg); // 7
let gloStr = str.search(regGlobal); // 7
string.slice(start,end)
slice方法复制string的一部分来构造一个新字符串- 若
start参数为负数,它将与string.length相加 end为要取的最后一个字符的位置+1
let str = "0123456789"; //length=10
let newStr = str.slice(0, 6); // 012345
let erroStr = str.slice(-3); // 789
string.split(separator,limit)
split方法把这个string分隔成片段创建一个数组separator允许是字符串或正则表达式,若为空则返回单字符数组limit会限制被分割的片段数量- 注:此方法的使用频率挺高的
let str = "abcde";
let newArr1 = str.split(); // [ 'abcde' ]
let newArr2 = str.split(""); // [ 'a', 'b', 'c', 'd', 'e']
let flagArr = str.split("", 3); // [ 'a', 'b', 'c' ]
let pickArr = str.split("b"); // [ 'a', 'cde' ]
string.substring(start,end)
substring方法与slice作用相同,只是它不接受负数- 注:因此平时使用
slice更好一些
string.toLocaleLowerCase()& string.toLocaleUpperCase()
toLocaleLowerCase方法返回一个全新全小写字符串toLocaleUpperCase方法返回一个全新全大写字符串- 冷知识:
**toLocaleUpperCase**是用来处理土耳其语 - 注:
i大写是-->İ而不是I
let str = "abCdE";
let upStr = str.toLocaleUpperCase(); // ABCDE
let lowerStr = str.toLocaleLowerCase(); // abcde
string.fromCharCode()
fromCharCode方法是通过字符编码找到对应字符并拼接- 注: 该方法返回一个字符串
let char = String.fromCharCode(67, 97, 116); //Cat
console.log(typeof char); // string
总结:
本章节描述的是
Function、Number、String、Object等常用方法集,便于理解,模拟出 API 实现的原理(大概思路是)。