红宝书(第四版)通读之查漏补缺

2025年04月20日 天气晴 伊通河畔

一、JavaScript构成

二、基础语法

1. 区分大小写

2. 标识符: 变量、函数、属性或函数参数的名称。

  • 第一个字符必须是一个字母、下划线(_)或美元符号($)
  • 剩下的其他字符可以是字母、下划线、美元符号或数字。
  • 表示符推荐使用驼峰形式书写(小驼峰),首字母小写后面的单词首字母大写

3. 注释

  • // 单行注释
  • /* 多行注释 */
  • /** JS Doc */

4. 严格模式:是一种不同的JS 解析和执行模型。目的,不破换ECMAScript3的语法

  • "use strict"可以在js脚本开头
  • "use strict"可以在函数内部的开头

5. 语句

  • 语句结束通过 ";" 进行标识,建议写上,避免代码压缩造成代码异常。

6. 关键字:是JavaScript语言中当前具有特定语法功能的词汇。不能作为标识符或属性名

break do in typeof
case else instanceof var
catch export new void
calss extends return while
const finally super with
continue for switch yield
debugger function this default
if throw delete import
try

7. 保留字:是JavaScript语言预留的词汇,它们目前可能没有特定的语法功能,但未来版本的JavaScript可能会赋予它们新的含义。不能作为标识符或属性名

  • 始终保留:enum
  • 严格模式保留:
implements package public interface
protected static let private
  • 模块代码中保留:await

8. 变量

  • ver关键字:范围是函数作用域,同层级不能声明同名变量
    • 局部变量,外部访问出错
    • 全局变量,任何位置可访问,会成为window的属性。
    • 状态提升,只在函数内部存在吗?需要验证一下在js标签内是否存在状态提升特性。
  • let 声明:范围是块作用域,同层级不能声明同名变量
    • 暂时性死区: var 关键字中的状态提升在let声明中会出现暂时性死区
    • 全局声明:不会挂到window的属性中。
    • 条件声明:不太理解???
    • for 中 var 声明的变量会渗透到循环外部,let 声明的变量只在循环代码块中。
  • const 声明:范围是块作用域,同层级不能声明同名变量
    • 常常称为常量:只能在声明变量时进行初始化,后面不可更改。
    • 声明限制只适用于它指向的变量引用
    • 所以 Object 中的Key和Value是可以修改调整的。
    • 循环,普通for不可使用 const声明,for...in...、for...of...是可以的,因为它们不需要修改数据。
  • 声明风格和最佳实践:
    const -> let -> var(尽量不使用)

9. 数据类型

Undefined Null Boolean Number
String Symbol(ES6+) 复杂数据类型Object(无序)
  • typeof 操作符:获取数据类型
    • "undefine":表示值为未定义
    • "boolean": 表示值为布尔值
    • "string":表示值为字符串
    • "number": 表示值为数值
    • "object":表示值为对象(而不是函数)或null;
    • "function":表示值为函数
    • "symbol":表示值为符号
  • undefined 类型
    • undefined 类型只有一个值,特殊值 undefined
    • varlet 未初始化的变量 都被赋予 undefined,不需要主动赋值undefined
    • 未被声明的变量 typeof 也会 返回 undefined

2025年04月26日 天气晴 住宅

  • Null 类型
    • Null类型只有一个值,特殊值 null
    • 逻辑上讲,null 值表示一个空对象指针,所以typeof null = Object
    • 声明变量建议使用 null 进行初始化
  • Boolean 类型
    • Boolean 类型 有两个字面值:true 和 false。注意,true != 1false != 0
    • 严格区分字面类型大小写。
    • 了不同类型与布尔值之间的转换规则如下表:
数据类型 转换为 true 的值 转换为 false 的值
Boolean true false
String 非空字符串 ""(空字符串)
Number 非零数值(包括无穷值) 0、NaN(参见后面的相关内容)
Object 任意对象 null
Undefined N/A(不存在) undefined
  • Number 类型

    • Number 类型使用 IEEE 754 格式表示整 数和浮点值
    • 整数值:通常用来存十进制八进制十六进制。但是,进行数学计算仍然被视为十进制进行计算。(类似将非十进制数据转为十进制,进行计算)
    • +0 和 -0 是完全相等的
    • 浮点值:数值中必须包含小数点,而且小数点后面必须至少有一个数字。虽然小数点前面不 是必须有整数,但推荐加上
    • 不要对浮点值进行是否相等的判断(使用了 IEEE 754 数值导致这个问题出现,与其他无关)
    • 对于非常大或非常小的数值,可以考虑使用科学计数法表示 0.000007 = 7e-6, 7000000 = 7e6
    • 值得范围:最小 Number.MIN_VALUE ,这个值在多数浏览器中是 5e-324,最大 Number.MAX_VALUE, 这个值在多数浏览器中是 1.7976931348623157e+308。超出这个范围的值,会被自动转换为一个特殊的 正负Infinity(无穷)值。
    • NAN值:有一个特殊的数值叫 NaN,意思是"不是数值"(Not a Number),用于表示本来要返回数值的操作 失败了(而不是抛出错误)。
    • ECMAScript 提供了 isNaN() 函数, 该函数接收一个参数,可以是任意数据类型,然后判断 这个参数是否"不是数值"。
    js 复制代码
    console.log(isNaN(NaN));    // true 
    console.log(isNaN(10));     // false,10 是数值 
    console.log(isNaN("10"));   // false,可以转换为数值 10 
    console.log(isNaN("blue")); // true,不可以转换为数值 
    console.log(isNaN(true));   // false,可以转换为数值 1
    • 类型转换:
      • Number() 是转型函数,转型规则如下:

        • 布尔值,true 转换为 1,false 转换为 0。
        • 数值,直接返回。
        • null,返回 0。
        • undefined,返回 NaN。
        • String 类型转换规则
          • 包括数值(整值/浮点值)字符前面带加、减号的有效字符串数值情况,转为正负十进制数值
          • 有效的十六进制或八进制字符串,会转为十进制数值(处理正负)
          • 空字符串,返回数值0
          • 如果字符串包含除上述情况之外的其他字符,则返回 NaN
        • 对象,调用 valueOf()方法,并按照上述规则转换返回的值。如果转换结果是 NaN,则调用 toString()方法,再按照转换字符串的规则转换。
      • parseInt(字符串, 进制) 是字符串转数值,从第一个非空格字符开始转换。如果第一个字符不是数值字符、加号或减号,parseInt()立即 返回 NaN。转型规则如下:

        • 进制不填写(多数填写10),就是让 parseInt 自己判断是什么进制类型。0x 前缀是 十六进制, 0 前缀在严格模式中是 八进制。
        • 转换规则实例如下:
        js 复制代码
        let num1 = parseInt("1234blue"); // 1234 
        let num2 = parseInt(""); // NaN 
        let num3 = parseInt("0xA"); // 10,解释为十六进制整数 
        let num4 = parseInt(22.5); // 22 
        let num5 = parseInt("70"); // 70,解释为十进制值 
        let num6 = parseInt("0xf"); // 15,解释为十六进制整数
        // 十六进制处理方式
        let num = parseInt("0xAF", 16); // 175 
        let num1 = parseInt("AF", 16); // 175 
        let num2 = parseInt("AF"); // NaN, parseInt 无法判断是什么进制值
      • parseFloat() 是字符串转数值,从位置 0 开始检测每个字符。同样, 它也是解析到字符串末尾或者解析到一个无效的浮点数值字符为止。这意味着第一次出现的小数点是有 效的,但第二次出现的小数点就无效了,此时字符串的剩余字符都会被忽略。转型规则如下:

        • 只能解析十进制数据,十六进制返回 0
        • 如果未解析到小数点,就返回整数
        • 转换规则实例如下:
        js 复制代码
            let num1 = parseFloat("1234blue"); // 1234,按整数解析 
            let num2 = parseFloat("0xA"); // 0 let num3 = parseFloat("22.5"); // 22.5 
            let num4 = parseFloat("22.34.5"); // 22.34 
            let num5 = parseFloat("0908.5"); // 908.5 
            let num6 = parseFloat("3.125e7"); // 31250000

个人博客地址

相关推荐
亭台烟雨中几秒前
【前端记事】关于electron的入门使用
前端·javascript·electron
泯泷14 分钟前
「译」解析 JavaScript 中的循环依赖
前端·javascript·架构
Senar44 分钟前
Web端选择本地文件的几种方式
前端·javascript·html
烛阴1 小时前
JavaScript 的 8 大“阴间陷阱”,你绝对踩过!99% 程序员崩溃瞬间
前端·javascript·面试
lh_12542 小时前
ECharts 地图开发入门
前端·javascript·echarts
周之鸥3 小时前
使用 Electron 打包可执行文件和资源:完整实战教程
前端·javascript·electron
前端snow3 小时前
前端全栈第二课:用typeorm向数据库添加数据---一对多关系
前端·javascript
全栈老李技术面试3 小时前
【高频考点精讲】async/await原理剖析:Generator和Promise的完美结合
前端·javascript·css·vue·html·react·面试题