遨游在犀牛书中的一点点收获!!!

222 阅读6分钟

今天心情有点浮躁,所以有点静不下心来,突然看到了手边的犀牛书,就翻了一下,看了几页书,所以想和大家分享一下,从书中的新收获!!!(因为还在上大学的学习阶段,如果有哪里 我的理解不到位,希望各位前辈们多多指出)


第一部分

首先我想把一下容易不被注意到的小知识点列出来,方便大家记忆。

书上说:任何数字与无穷值Infinity或者-Infinity进行+,-,,/最终结果都是无穷值,只是符号不同。*

但是我在测试的时候发现一些不同的现象

     console.log(1 / Infinity); //0
     console.log(1 / -Infinity); //-0
     console.log(10*Infinity)//Infinity
     console.log(-10*Infinity)//-Infinity
     console.log(0*Infinity)//NaN
     console.log(Infinity/-Infinity); //NaN
     console.log(Infinity*Infinity); //Infinity

我得出一下结论,如果有存在争议,希望大家及时指正。

  • 任何数字 无穷值 最终结果都是0(符号与无穷值符号保持一致)。
  • 任何数字 无穷值 最终结果都是无穷值(不包括0)。
  • 0 无穷值 最终结果为NaN。
  • 任何数字或者无穷值 最终结果都是无穷值。
  • 无穷值与无穷值之间做除法最终结果都是NaN
  • 无穷值之间的 或者操作结果是NaN或者是无穷值(根据正常理解即可得出,正无穷-负无穷得正无穷等等)
  • 无穷值与无穷值之间做乘法最终结果还是无穷值。 以上部分内容与书中提到的有一定的差异。

注意:不可以根据双等号或者三等号判断某个变量值为NaN 可以通过Number.isNaN()和x!=x来判断

console.log(NaN === NaN)//false
console.log(NaN == NaN)//false

let x = NaN;
console.log(x!=x) //true
console.log(Number.isNaN(x))//true

常用Number下的方法和属性还有很多,我简单举几个。

  • Number.isFinity(x) 判断x是数值还是无穷,数值返回true
  • Number.isInteger(x) 判断x是不是整数,是整数返回true
  • Number.MAX_VALUE
  • Number.MIN_VALUE
  • Number.MAX_SAFE_INTEGER
  • Number.MIN_SAFE_INTEGER
console.log(Number.isFinite(Infinity)) //false
console.log(Number.isInteger(10))//true
console.log(Number.isInteger(10.10))//false

第二部分

接下来给大家整理了一些常用的串操作函数。

  • indexOf / lastIndexOf
  • includes
  • startsWith / endsWith
  • repeat
  • toLowerCase / toUpperCase
  • charAt
  • slice / substring / substr
  • split / replace
  • trim / trimStart / trimEnd
  • charCodeAt

为了方便大家执行看结果,我特意写好了对照样例,大家可以直接复制到自己的VSCODE中执行

console.log("-----indexOf----lastIndexOf-------------")
let str = "asdfadgadfgag";
console.log(str.indexOf('g')); //返回f在字符串中第一次出现的位置,没找到则返回-1。
console.log(str.indexOf('w'));
console.log(str.lastIndexOf("g")); // 返回某个指定的子字符串在字符串中最后出现的位置,没找到则返回-1.

console.log("-------includes---------------")
console.log(str.includes('fg')); //返回boolean类型,判断主串中是否包含子串。
console.log(str.includes('w'));

console.log("--------startsWith--------------");
console.log(str.startsWith("asd")); //返回boolean 查询字符串是否是原字符串的开头 
console.log(str.startsWith("sss"));

console.log("----------endsWith------------")
console.log(str.endsWith("a")); //返回boolean endsWith() 查询字符串是否是原字符串的结尾 
console.log(str.endsWith("asda"));

console.log("---------repeat-------------") //原数组不变
console.log(str);
console.log(str.repeat(3)); //返回一个新的字符串 repeat(number) 复制当前字符串,复制number次.


let s1 = "HellO WorlD";

console.log("---------toLowerCase-------------")
console.log(s1.toLowerCase()); //返回新串 将字母变成小写
console.log(s1) //不改变原字符串

console.log("-------toUpperCase---------------") //不改变原字符串
console.log(s1.toUpperCase()); //把字符串转为大写,返回新的字符串。

console.log("-------charAt---------------") //不改变原字符串
console.log(s1.charAt(4)) //返回指定下标位置的字符。如果index不在0-str.length(不包含str.length)之间,返回空字符串。

console.log("---------slice-------------") //不改变原串
console.log(s1.slice(4)) //如果只有一个参数,则提取开始下标到结尾处的所有字符串
console.log(s1.slice(4, 7)) //两个参数,提取下标为4,到下标为7但不包含下标为8的字符串
console.log(s1.slice(-5, -2)) ////如果是负数,-1为字符串的最后一个字符。提取从下标-7开始到下标-2但不包含下标-2的字符串。前一个数要小于后一个数,否则返回空字符串

console.log("---------substring-------------") //不改变原串
    // 不可谓负数   
console.log(s1.substring(4)) //如果只有一个参数,则提取开始下标到结尾处的所有字符串
console.log(s1.substring(4, 7)) //两个参数,提取下标为4,到下标为7但不包含下标为7的字符串

console.log("---------substr-------------") //返回截取后字符串,不改变源串
console.log(s1.substr(2)) //如果只有一个参数,则提取开始下标到结尾处的所有字符串
console.log(s1.substr(2, 2)) //从2位开始  截取2个字符
console.log(s1.substr(-3, 2)) //从倒数第三个开始  截取2个字符

console.log("---------split-------------") //返回拆分后的数组,不改变原字符串
console.log(s1.split("")) //每个字符都拆分
console.log(s1.split(" ")) //根据空格拆分
console.log(s1.split("", 6)) //6为返回数组的最大长度

console.log("---------replace-------------")
console.log(s1.replace(" ", "*")) //用*代替空格 只替换第一次出现的,返回新字符串,不改变原字符串

console.log("---------trim/trimStart/trimEnd-------------")//不改变原串
let sstr = ' 12 3 '        
console.log(sstr.trim()) //删除字符串首尾的空格,内部的不删除。 
console.log(sstr.trimStart())//删除字符串首的空格。
console.log(sstr.trimEnd())//删除字符串尾的空格。

console.log("-----------charCodeAt-----------")
let ssstr = 'ab'
console.log(ssstr.charCodeAt(0))//97 //a对应的十六位值
console.log(ssstr.charCodeAt(1))//98 //b对应的十六位值

第三部分

接下来给大家整理了一些常用的数组操作函数。

  • push / pop / shift / unshift
  • reverse
  • concat
  • slice
  • splice
  • find
  • findIndex
  • Array.from / Array.of
  • arr.values() / arr.keys() / arr.entries()
const arr = [4, 5, 6, 7, NaN];
const a = [...arr, 5];
console.log(a);
console.log(arr);

console.log("---------push------------")
console.log(arr.push("aaa", "bbb")); //方法可向数组的末尾添加一个或多个元素,并返回新的长度。
console.log(arr);

console.log("---------pop------------")
console.log(arr.pop()); //方法用于删除并返回数组的最后一个元素。
console.log(arr);

console.log("---------shift------------")
console.log(arr.shift()); //方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
console.log(arr);

console.log("---------unshift------------")
console.log(arr.unshift("bb")); //方法可向数组的开头添加一个或更多元素,并返回新的长度。
console.log(arr);

console.log("---------reverse------------")
console.log(arr.reverse()); //方法用于颠倒数组中元素的顺序。原数组改变
console.log(arr);

console.log("---------concat------------") //连接两个或多个数组
const arr2 = [11, 12, 13, 14, [10, 8]]
console.log(arr.concat()); //该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。在没有给 concat()方法传递参数的情况下,它只是复制当前数组并返回副本。
console.log(arr.concat(arr2));

console.log("---------arr.slice(start , end);------------")
console.log(arr.slice(0, 4)); //返回一个新的数组,包含从 start 到 end (不包括该元素)的 arr 中的元素。
console.log(arr.slice());

console.log("---------arr.splice(index , howmany , item1,.....,itemX)------------")
index:必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany:必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, ..., itemX:可选。向数组添加的新项目。
console.log(arr.splice(1, 3, "200")) //删除的数组
console.log(arr) //删除上方数组后剩下的

console.log("---------find------------")
const res = arr.find(elem => elem > 5)
console.log(res);

console.log("---------findIndex------------")
const res2 = arr.findIndex(elem => elem > 6)
console.log(res2);

console.log("---------Array.from/Array.of------------")
Array.from() 将类数组转换为数组
Array.of() 将一组值转变为数组, 参数不分类型, 只分数量, 数量为0返回空数组。
数组遍历 map、 filter、 forEach、 some、 every 、reduce

console.log("---------arr.values()/arr.keys()/arr.entries()")
for (let elem of arr.values()) {
    console.log(elem);
}
for (let elem of arr.keys()) {
    console.log(elem);
}

for (let [index, elem] of arr.entries()) {
    console.log(index, elem);
}

本章就是心血来潮 为大家准备一些基础的 串内容数组内容 ,自己的看法比较少 ,就当整理一点基础内容啦。


如果有哪里不对,希望大家可以指出,这样也可以深入我自己对这些内容的理解, 谢谢大家