前言
大家好,我是HoMeTown,web领域有一本神书大家应该都有看过,这本书我看过两遍,但是每次看都是粗粗的略过一些重要的知识点,甚至一些面试过程中的问题,在这本书里都能找到答案。
工作这么多年,到现在为止对这本书都没有一个系统的知识点记录,这次想从头读一遍这一本JavaScript高级程序设计【第4版】,并把重要的知识点
记录下来,同时加上自己的见解,这也是我第一次在掘金上记录分享读书笔记,共勉之!
关注专栏,一起学习吧~
Boolean
let booleanObj = new Boolean(true) console.log(booleanObj) // Boolean {true} 复制代码
boolean实例的valueOf
返回一个原始值:true或false,toString
方法被调用也会覆盖,返回一个字符串原始值:'true'或'false'。
强烈建议永远不要使用new Boolean
:
let falseBoolean = new Boolean(true) let trueBoolean = true console.log(typeof falseBoolean) // object console.log(typeof trueBoolean) // boolean 复制代码
Number
let numberObj = new Number(10) 复制代码
与Boolean一样,Number也重写了valueOf
、toString
方法。
Number实例的valueOf
返回一个原始值:10,toString
方法被调用也会覆盖,返回一个字符串原始值:'1'。
toString方法可以接受接受一个参数进制
:
let num = new Number(10) console.log(num.toString(2)) // '1010' 复制代码
isInteger
isInteger
可以辨别一个数值是否为整数:
let intNum = 10 let floatNum1 = 10.1 let floatNum2 = 10.0 console.log(Number.isInteger(intNum)) // true console.log(Number.isInteger(floatNum1)) // false console.log(Number.isInteger(floatNum2)) // true 复制代码
toFixed
接受一个参数n,保留n位小数:
let num = 3.1415926 console.log(num.toFixed(3)) // 3.142 复制代码
toExponential & toPrecision
科学计数法(指数计数法)
String
const stringObj = new String('hello HoMeTown') 复制代码
String的valueOf
、toString
都返回原始值。
每个String实例上都有一个length
属性。
console.log(stringObj.length) // 14 复制代码
JavaScript字符
JavaScript字符串由16位码元(code unit)组成,每16位码元对应一个字符,字符串的length标识字符串包含多少位16位码元。
concat
返回拼接后的结果
let str = "home" let res = str.concat('town') console.log(res) // hometown console.log(str) // home 复制代码
字符串提取的方法
都返回调用他们的字符串的一个子字符串,都接受1~2个参数。
第一个参数表示:子字符串开始的位置。
第二个参数见详细介绍。
省略第二个参数都意味着提取到字符串末尾。
不会修改调用它们的字符串,只会返回新的字符串。
slice
第二个参数是提取结束的位置。
let str = 'hometown' console.log(str.slice(4)) // 'town' console.log(str.substr(4)) // 'town' console.log(str.substring(4)) // 'town' console.log(str.slice(1, 4)) // 'ome' console.log(str.substr(1, 4)) // 'omet' console.log(str.substring(1, 4)) // 'ome' 复制代码
substr
第二个参数表示返回的子字符串的数量
。
substring
第二个参数是提取结束的位置。
indexOf
let str = "hometown" console.log(str.indexOf('h')) // 0 复制代码
includes
let str = "hometown" console.log(str.includes('h')) // true 复制代码
startsWith
是否以某个字符开头:
let str = "hometown" console.log(str.startsWith('h')) // true 复制代码
endsWith
是否已某个字符结束:
let str = "hometown" console.log(str.endsWith('h')) // false 复制代码
trim
删除前后所有空格,返回结果:
let str = ' hello hometown ' console.log(str.trim()) // hello hometown 复制代码
trimLeft()
和trimRight()
就是分别从开始和末尾清除空格。
repeat
接受一个整数参数,表示要将字符串重复多少次,返回拼接后的结果:
let str = 'hello ' console.log(str.repeat(10) + 'hometown') // hello hello hello hello hello hello hello hello hello hello hometown 复制代码
padStart & padEnd
接收两个参数,第一个是指定字符串最后的长度,第二个是填充字符(默认为空格)。
let str = "hometown"; console.log(str.padStart(16, "a")); // "aaaaaaaahometown" console.log(str.padStart(16)); // " hometown" 复制代码
迭代与结构
字符串结构的原理: Symbol(Symbol.iterator) :
let str = 'hmt' let strIterator = str[Symbol.iterator]() console.log(strIterator.next()) // {value: 'h', done: false} console.log(strIterator.next()) // {value: 'm', done: false} console.log(strIterator.next()) // {value: 't', done: false} console.log(strIterator.next()) // {value: undefined, done: true} const message = 'hometown' console.log([...message]) // ['h', 'o', 'm', 'e', 't', 'o', 'w', 'n'] 复制代码
字符串大小写转换
toLowerCase
toLocaleLowerCase
toUpperCase
toLocaleUpperCase
Locale
是指在特定区域用的,比如土耳其语。
let str = 'HoMeTown' console.log(str.toLowerCase()) // hometown console.log(str.toLocaleLowerCase()) // hometown console.log(str.toUpperCase()) // HOMETOWN console.log(str.toLocaleUpperCase()) // HOMETOWN 复制代码
如果不知道是什么语言,建议使用xxxLocalexxx()
!
match
接受一个参数:正则:
let str = "cat, bat, sat, fat"; let pattern = /.at/ let matches = str.match(pattern) console.log(matches) // ['cat', index: 0, ...] 复制代码
charAt
返回给定索引位置的字符,更具体一点查找的是索引位置的16位码元,并返回码元对应的字符:
let str = 'hometown' console.log(str.charAt(3)) // e 复制代码
JavaScript字符串使用了两种 Unicode编码混合的策略:UCS-2 和 UTF-16。
charCodeAt
返回指定索引位置的码元值的10进制表示:
let str = 'hometown' console.log(str.charCodeAt(3)) // 101 === 0x65 复制代码
formCharCode
接收UTF-16码元,返回对应的字符串,并拼接起来:
console.log(String.fromCharCode(0x65, 0x66, 0x67)) //efg 复制代码