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的值 |
|---|---|---|
| Boolean | true | true |
| 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。
- 对象(Object):仅当两个操作数引用同一个对象时返回
- 如果任一操作值是布尔值,则将其转换为数值再比较是否相等。
- 如果一个操作数是字符串,另一个是数值,则尝试将字符串转换为数值再比较。
- 如果一个操作数是对象,另一个不是,则调用对象的valueOf()方法取得其原始值,再根据前面的规则进行比较。
- 如果任一操作数是NaN,则相等返回false,不等返回true。
- 如果两个操作数都是对象,则比较它们是不是同一个对象,如果两个操作数都指向同一个对象,则返回true,否则返回false。
在进行比较时,这两个操作符会遵循如下规则
- null和undefined相等。
- null和undefined不能转换为其他类型的值再进行比较。