变量与常量
1. 声明方式对比
var name = "张三" ;
let age = 25 ;
const PI = 3.1415 ;
2.关键区别
3.实用性
const MAX_SIZE = 100 ;
const user = { name : 'Alice' , age : 28 } ; user. age = 29 ;
const COLORS = [ 'red' , 'green' ] ; COLORS . push ( 'blue' ) ;
数据类型
1. 类型分类
原始类型
Undefined:未赋值的变量
Null:空值对象指针
Boolean:true / false
Number:双精度浮点数
String:UTF - 16 字符串
Symbol:唯一标识符(ES6 + )
BigInt:大整数(ES2020 + )
对象类型
Object
Array
Function
Date
其他内置对象
2. 类型检测
typeof "hello"
typeof 42n
typeof Symbol ( )
( { } ) . toString . call ( null )
Object . prototype. toString . call ( [ ] )
function isObject ( val ) {
return val !== null && ( typeof val === 'object' || typeof val === 'function' ) ;
}
3.类型转换陷阱
Number ( "123" )
String ( true )
Boolean ( [ ] )
"5" + 2
"5" - 2
[ ] == ! [ ]
null == undefined
NaN === NaN
Object. is ( NaN , NaN )
运算符
1. 算术运算符
10 % 3
2 ** 3
let a = 1 ;
a++
++ a
0.1 + 0.2 === 0.3
Math. round ( ( 0.1 + 0.2 ) * 100 ) / 100
2.比较运算符
5 === '5'
NaN !== NaN
{ } === { }
const obj = { } ;
obj === obj
3. 逻辑运算符
const name = user. name || '匿名' ;
const count = value && value. length;
const width = options. width ?? 100 ;
const street = user?. address?. street;
4. 位运算符
const READ = 1 << 0 ;
const WRITE = 1 << 1 ;
const EXECUTE = 1 << 2 ;
let permissions = READ | WRITE ;
if ( permissions & READ ) {
console. log ( '可读' ) ;
}
流程控制
1. 条件语句
if ( score >= 90 ) {
grade = 'A' ;
} else if ( score >= 60 ) {
grade = 'C' ;
} else {
grade = 'D' ;
}
switch ( true ) {
case score >= 90 :
grade = 'A' ;
break ;
default :
grade = 'D' ;
}
2. 循环结构
for ( let i = 0 , len = arr. length; i < len; i++ ) {
}
for ( const item of iterable) {
console. log ( item) ;
}
while ( condition) {
if ( specialCase) continue ;
if ( exitCondition) break ;
}
3. 错误处理
try {
JSON . parse ( 'invalid json' ) ;
} catch ( err) {
console. error ( '解析错误:' , err. message) ;
throw new Error ( '处理失败' , { cause : err } ) ;
}
finally { cleanup ( ) ; }
现代语法特性
1. 解构赋值
const [ first, , third] = [ 1 , 2 , 3 ] ;
const { name : userName, age } = { name : 'Bob' , age : 30 } ;
function print ( { x, y = 0 } ) {
console. log ( ` 坐标: ( ${ x} , ${ y} ) ` ) ;
}
2. 展开运算符
const newArr = [ ... arr1, ... arr2] ;
const merged = { ... defaults, ... options } ;
Math. max ( ... [ 1 , 5 , 3 ] ) ;
3. 模板字符串
const multiLine = ` 第一行 第二行 ` ;
const message = ` 您好 ${ name} ,您的余额是¥ ${ balance. toFixed ( 2 ) } ` ;
4.实现深拷贝
function deepClone ( obj ) {
if ( obj === null || typeof obj !== 'object' ) return obj;
if ( obj instanceof Date ) return new Date ( obj) ;
if ( obj instanceof RegExp ) return new RegExp ( obj) ;
const clone = Array. isArray ( obj) ? [ ] : { } ;
for ( const key in obj) {
if ( obj. hasOwnProperty ( key) ) {
clone[ key] = deepClone ( obj[ key] ) ;
}
}
return clone;
}