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
var
和let
未初始化的变量 都被赋予undefined
,不需要主动赋值undefined- 未被声明的变量
typeof
也会 返回undefined
- undefined 类型只有一个值,特殊值
2025年04月26日 天气晴 住宅
- Null 类型
- Null类型只有一个值,特殊值
null
- 逻辑上讲,null 值表示一个空对象指针,所以
typeof null = Object
- 声明变量建议使用
null
进行初始化
- Null类型只有一个值,特殊值
- Boolean 类型
- Boolean 类型 有两个字面值:true 和 false。注意,
true != 1
且false != 0
- 严格区分字面类型大小写。
- 了不同类型与布尔值之间的转换规则如下表:
- Boolean 类型 有两个字面值:true 和 false。注意,
数据类型 | 转换为 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() 函数, 该函数接收一个参数,可以是任意数据类型,然后判断 这个参数是否"不是数值"。
jsconsole.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 前缀在严格模式中是 八进制。
- 转换规则实例如下:
jslet 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
- 如果未解析到小数点,就返回整数
- 转换规则实例如下:
jslet 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
-
个人博客地址