字节青训营前端青训营笔记「9」 | 青训营笔记

94 阅读5分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天

0 前面的话

今天就写点JavaScript的知识吧!知识点内容可能比较散,仅记录一下而已。这里的学习参考了部分菜鸟教程内容,如有需要,链接:www.runoob.com/js/js-obj-n…

1 正文

JavaScript Number 对象

默认情况下,JavaScript 数字为十进制显示。

但是可以使用 toString() 方法 输出16进制、8进制、2进制。

var myNumber=128;  
myNumber.toString(16);   // 返回 80  
myNumber.toString(8);    // 返回 200  
myNumber.toString(2);    // 返回 10000000

正负无穷大:Infinity、-Infinity。

关于 Infinity, -Infinity 和 NaN

  • Infinity , -Infinity 和 NaN 都是 JavaScript 保留字,不能用作标识符,对大小写敏感
  • -Infinity 的负号与 "Infinity" 之间不能**有空格。
  • -Infinity 不需要用括号包围; 1 - (-Infinity) 和 1 - -Infinity 是等价的。
  • 和其他数字一样,这三者与字符串相加会得到字符串。
  • 这三者不等于任何一个有限数字。
  • 使用对象的 .stringgify() 方法转换为 JSON 文本时,这三者会被转换为 null 。

Infinity 运算法则

  • 正数除以 0 得 Infinity。
  • Infinity 加或减任何有限数字都得 Infinity 。Infinity + Infinity 或 Infinity - -Infinity 也得 Infinity 。
  • Infinity 乘或除以任何有限正数得 Infinity 。Infinity 乘或除以任何有限负数得 -Infinity 。 Infinity * Infinity 或 Infinity / 0 也得 Infinity 。Infinity * -Infinity 得 -Infinity。
  • Infinity - Infinity 得 NaN 。 Infinity / Infinity 得 NaN 。 Infinity * 0 得 NaN 。
  • Infinity == Infinity 为真。 Infinity.isNaN() 为假。 Infinity.isFinite() 为假。 Boolean(Infinity) 为真。

-Infinity 运算法则

  • 负数除以 0 得 -Infinity。
  • -Infinity 加或减任何有限数字都得 -Infinity 。-Infinity + -Infinity 或 -Infinity - Infinity 也得 -Infinity 。
  • -Infinity 乘或除以任何有限正数得 -Infinity 。-Infinity 乘或除以任何有限负数得 Infinity 。 -Infinity * Infinity 或 -Infinity / 0 也得 -Infinity 。-Infinity * -Infinity 得 Infinity。
  • -Infinity - -Infinity 得 NaN 。 -Infinity / -Infinity 得 NaN 。 -Infinity * 0 得 NaN 。
  • -Infinity == -Infinity 为真。 -Infinity.isNaN() 为假。 -Infinity.isFinite() 为假。 Boolean(-Infinity) 为真。

NaN 运算法则

  • 0 / 0 得 NaN 。上面也有一些得 NaN 的情况。
  • NaN 加、减、乘或除以任何数(包括 Infinity 、 -Infinity 和 NaN 本身)得 NaN 。
  • 无论变量 x 取何值(包括 undefined 、 null 、 true 、 false 、 Infinity 、 -Infinity 和 NaN 本身),NaN == x 恒为假。NaN.isNaN() 为真。 NaN.isFinite() 为假。 Boolean(NaN) 为假。

JavaScript 字符串(String) 对象

下表列出其他特殊字符,可以使用反斜线转义特殊字符:

代码输出
\'单引号
\"双引号
\\斜杆
\n换行
\r回车
\ttab
\b空格
\f换页

JavaScript Date(日期) 对象

为日期对象设置了一个特定的日期 (2010 年 1 月 14 日):

var myDate=new Date();
myDate.setFullYear(2010,0,14);

将日期对象设置为 5 天后的日期:

var myDate=new Date();
myDate.setDate(myDate.getDate()+5);

注意:  如果增加天数会改变月份或者年份,那么日期对象会自动完成这种转换。

两个日期比较

日期对象也可用于比较两个日期。

下面的代码将当前日期与 2100 年 1 月 14 日做了比较:

var x=new Date();
x.setFullYear(2100,0,14);
var today = new Date();

if (x>today)
{
    alert("今天是2100114日之前");
}
else
{
    alert("今天是2100114日之后");
}

JavaScript Array(数组) 对象

Js 中为数组提供了多种遍历方式

const ary = ['a', 'b', 'c'];

// 最基本的方式, 只能遍历下标有序递增的数组
for (let i=0; i<ary.length; i++) {
  console.log(i, ary[i]);   // 0 a  1 b  2 c
}

// in:每遍历一次数组指针向后移动一位, 并得到当前数组元素值的下标, 可以通过 ary[key] 来访问数组元素值
for (let key in ary) {
  console.log(key, ary[key]);  // 0 a  1 b  2 c
}

// of:每遍历一次数组指针向后移动一位, 并得到当前数组元素的值, 处理二维数组时极为方便
for (let value of ary) {
  console.log(value);    // a b c
}

Js还为数组对象内置了多种迭代方法, 处理数组时极为方便

/**
 *  forEach(function)
 *  
 *  该方法接受一个函数作为参数, 该函数拥有两个参数, 分别为数组的值、键
 *  该方法没有返回值
 */

 ary.forEach((value, key) => {
    console.log(key, value); // 0 a  1 b  2 c
 })


/**
 * map(function)
 *  
 * 该方法接受一个函数作为参数, 该函数拥有两个参数, 分别为数组的值、键
 * 可以在传入的函数中返回相应的值,你每次迭代时返回的值会被map方法组装成一个新数组作为返回值返回
 */

 var result = ary.map((value, key) => {
    return value + '_runoob.com';
 })

 console.log(result); // ['a_runoob.com', 'b_runoob.com', 'c_runoob.com']

数字索引与非数字索引

JavaScript 数组只支持数字索引,非数字索引指的是对象的属性了。

JavaScript 的数组可以看做是特殊的对象(object),对象的属性有两种表示方法。

var a=Object();
a.myattr="runoob";
a["myattr"]="runoob";

查看以下实例:

var a=new Array();
a['a1']=1;
a['a2']=2;
a.length  // 输出0

实例中由于你没有给数组的元素赋值,所以 a 数组的长度也没有被创建出来,此时 a.length 输出结果为 0。

var a=new Array();
a['a1']=1;
a['a2']=2;
a[2]=3;
a.length  // 输出3

在最后一行代码中数组元素 a[2] 赋值了,此时 JavaScript 会给数组 a 创建一个长度为 3 的空间,并在第三个元素中赋以3,但是元素1和元素2都没有赋值,所以此时a[0]和a[1]是没有值的。

如果要使用的是一个完全由“字符串下标”组成的数组,那还是将其声明为一个 Object 类型的对象要更好一些。

var a=new Array();
a['a1']=1;
a["100"]=3;
a.length  // 输出 101

Javascript 数组下标值的范围为 0 ~ 232。对于任意给定的数字下标值,如果不在此范围内,Javascript 会将它转换为一个字符串,并将该下标对应的值作为该数组对象的一个属性值而不是数组元素,例如 array[-1] = "yes" 其实就相当于给 array 对象添加了一个名为 -1 的属性,属性值为 yes。如果该下标值在合法范围内,则无论该下标值是数字还是数字字符串,都一律会被转化为数字使用,即 array["100"] = 0 和 array[100] = 0 执行的是相同的操作。

JavaScript Math(算数) 对象

使用了 Math 对象的 round 方法对一个数进行四舍五入。

document.write(Math.round(4.7));

上面的代码输出为:

5

JavaScript RegExp 对象

什么是 RegExp?

正则表达式描述了字符的模式对象。

当您检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。

简单的模式可以是一个单独的字符。

更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。

您可以规定字符串中的检索位置,以及要检索的字符类型,等等。

RegExp 修饰符

修饰符用于执行不区分大小写和全文的搜索。

i - 修饰符是用来执行不区分大小写的匹配。

g - 修饰符是用于执行全文的搜索(而不是在找到第一个就停止查找,而是找到所有的匹配)。

在字符串中不区分大小写找"runoob"

var str = "Visit RUnoob"; var patt1 = /runoob/i;

以下标记的文本是获得的匹配的表达式:

Visit RUnoob