JavaScript第一天知识点回顾

65 阅读4分钟

JavaScript执行顺序

不管包含的是什么代码,浏览器都会按照<script>在页面中出现的顺序依次解释它们。第二个<script>标签内的代码必须在第一个<script>标签中的代码解释完毕才开始解释,第三个则必须等第二个,以此类推。

ES6新增的JS数据类型

ES6中新增的JS数据类型包括:Symbol类型和BigInt类型。

1.Symbol:函数会返回 symbol 类型的值,该类型具有静态属性和静态方法。它的静态属性会暴露几个内建的成员对象;它的静态方法会暴露全局的 symbol 注册,且类似于内建对象类,但作为构造函数来说它并不完整,因为它不支持语法:"Symbol()``new Symbol()"。每个从Symbol()返回的 symbol 值都是唯一的。一个 symbol 值能作为对象属性的标识符;这是该数据类型仅有的目的。

const symbol1 = Symbol();
const symbol2 = Symbol(42);
const symbol3 = Symbol(42);

console.log(typeof symbol1);
// Expected output: "symbol"

console.log(symbol2 === 42);
// Expected output: false

console.log(symbol3.toString());
// Expected output: "Symbol(42)"

console.log(symbol2 == symbol3);
// Expected output: false

2.Bigint:是一种内置对象,它提供了一种方法来表示大于的整数。这原本是 Javascript 中可以用 Number 表示的最大数字。BigInt 可以表示任意大的整数。它在某些方面类似于 Number ,但是也有几个关键的不同点:不能用于 Math对象中的方法;不能和任何 Number实例混合运算,两者必须转换成同一种类型。在两种类型来回转换时要小心,因为 变量在转换成 Number 变量时可能会丢失精度。

强制类型的转换方法的转换规则

1.Boolean()函数的转换规则:

数据类型转换为true的值转化为false的值
Booleantruetrue
String非空字符串""(空字符串)
Number非零数值(包括无穷值)0、NaN
Object任意对象null
Null/Undefined不存在null/undefined

2.Number()函数的转换规则:

  • 布尔值:true转换为1,false转换为0.
  • 数值:直接返回。
  • null:返回0。
  • undefined:返回NaN。
  • 字符串:
    • 如果字符串包含数值字符 ,包括数值字符前面带加、减号的情况,则转换为一个十进制数值,因此Number("1")返回1,Number("123")返回123,Number("011")返回11.
    • 如果字符串包含有效的浮点值格式如“1.1”,则会转换为对应的浮点值。
    • 如果字符串包含有效的十六进制格式,则会转换为与该十六进制值对应的十进制数值。
    • 如果是空字符串,则返回0。
    • 如果字符串包含除上述 情况之外的其他字符,则返回NaN。
  • 对象:调用valueof()方法,并按上述规则转换返回的值。如果转换结果是NaN,则调用toString()方法,再按照字符串转换规则转换。

3.字符串转换规则:

toString()方法转换规则:通过调用被转换数据类型的toString()方法来实现,该方法的唯一用途就是返回当前值的字符串等价物。不过null和undefined这两个类型没有该方法,若使用则会报错。

String()函数转换规则:如果值有toString()方法,则调用该方法。如果值是null,返回"null",如果值是undefined,返回"undefined"。

相等和不相等操作符遵循的规则

  • 如果操作数具有相同的类型,则按如下方式进行比较:
    • 对象(Object):仅当两个操作数引用同一个对象时返回true 。
    • 字符串(String):只有当两个操作数具有相同的字符且顺序相同时才返回true 。
    • 数值(Number):如果两个操作数的值相同,则返回true+0-0被视为相同的值。如果任何一个操作数是NaN,返回false;所以,NaN永远不等于NaN
    • 布尔值(Boolean):仅当操作数都为true或都为false时返回true
    • 大整形(BigInt):仅当两个操作数值相同时返回true
    • 符号(Symbol):仅当两个操作数引用相同的符号时返回true
  • 如果任一操作值是布尔值,则将其转换为数值再比较是否相等。
  • 如果一个操作数是字符串,另一个是数值,则尝试将字符串转换为数值再比较。
  • 如果一个操作数是对象,另一个不是,则调用对象的valueOf()方法取得其原始值,再根据前面的规则进行比较。
  • 如果任一操作数是NaN,则相等返回false,不等返回true。
  • 如果两个操作数都是对象,则比较它们是不是同一个对象,如果两个操作数都指向同一个对象,则返回true,否则返回false。

在进行比较时,这两个操作符会遵循如下规则

  • null和undefined相等。
  • null和undefined不能转换为其他类型的值再进行比较。