1. 变量
- 变量:内存中能存储值的空间
- 声明变量:
- var num = 1
- 声明一个变量,可选初始化一个值
- let str = ‘hello’
- 声明一个块级作用域变量,可选初始化一个值
- 建议习惯用let
- const isSelected = true
- 声明一个只读的常量
- var num = 1
- 标识符规范
- 变量的名字又叫标识符
- 必须以字母、下划线_或者$开头
- 后续的字符可以是数字(0-9)、字母、下划线、$
- 区分大小写
- 中文是合法的标识符,但尽量少用
- 保留字不能作为标识符,如 with, super, while, function, new, null, do, ….
2. 数据类型(8种)
- 7种原始类型(primitive type)
- 布尔值(boolean), 有2个值分别是true和false
- null,表示空。
- undefined, 表示变量未定义时的值
- 数字(number),整数或者浮点数,比如100, 3.16。数字大小是有限制 的 -2^53到2^53
- 任意精度整数(bigint),可以存储和操作大整数, 比如10034534343n
- 字符串(string), 比如 “hello world” ,或者’hello world’
- symbol, 创建一个独一无二的值 let key = Symbol()
- 1种复合类型(complex type)
- 除了上面7种以外的都是对象(object), 比如狭义的对象、函数、数组…
- 对象是多个 属性:值 的集合
typeof
表达式
- 是一个值,或者说能计算得到一个值
- 比如:
- 2 * (2 + 3)
- a + b
- 3 > 2
- a = 4
- 运算符
- 用于连接表达式,组成一个复杂的表达式
- 比如:
- a * (2 + 3)
- a + b
- 3 > 2
- x = ‘hello’
- 加法运算符
- 在两个操作数都是数字的时候,会做加法运算
- 两个参数都是字符串或在有一个参数是字符串的情况下会把另外一个参数转换为字符串做字符串拼接
- 在参数有对象的情况下会调用其valueOf()方法或toString()方法
- 在只有一个字符串参数的时候会尝试将其转换为数字
- 在只有一个数字参数的时候返回其正数值 ```javascript console.log(1 + 2) // 3 console.log(1 + ‘aa’) // “1aa”
let a = +’12’ console.log(a) // 12
let b = +null console.log(b) // 0
let c = +undefined console.log(c) // NaN
let obj1 = { a: 1, valueOf: function() { return 3 } } let obj2 = { a: 1 } let b = 5 console.log(obj1 + b) // 8 console.log(obj2 + b) // “[object Object]5”
- **算数运算符**
- 加法运算符(Addition):x + y
- 减法运算符(Subtraction): x - y
- 乘法运算符(Multiplication): x * y
- 除法运算符(Division):x / y
- 余数运算符(Remainder):x % y
- 自增运算符(Increment):++x 或者 x++
- 自减运算符(Decrement):--x 或者 x--
- 求负运算符(Negate):-x
- 数值运算符(Convert to number): +x
- **比较运算符**
- == 相等
- === 严格相等
- !=不相等
- !== 严格不相等
- < 小于
- <= 小于或等于
- > 大于
- >= 大于或等于
- **布尔运算符**
- ! 取反运算符
- !! 强制转换成boolean类型
- && 且运算符
- || 或运算符
- condition? true case : false case 三元条件运算符
- **其他运算符**
- 小括号
- 在JavaScript中,圆括号是一种运算符,它有两种用法:如果把表达式放在圆括号之中,作用是求值;如果跟在函数的后面, 作用是调用函数
- 把表达式放在圆括号之中,将返回表达式的值
- void
- void运算符的作用是执行一个表达式,然后返回undefined
- 逗号运算符
- 逗号运算符用于对两个表达式求值,并返回后一个表达式的值
- typeof
- 这也是一个运算符
- **运算符结合性和优先级**
- 优先级从低到高
- 逗号(,) < 赋值(=) < 逻辑或(||) < 逻辑与(&&) < 相等判断(===) < 大小判断(>,<) < 加减 < 乘除 < typeof < 前置递减递增(++...) < 逻辑非(!...) < 后置递减递增 (...++) < new < 成员访问(x[y]或x.y) < 小括号
- **非正常案例**
```javascript
typeof NaN // "number"
NaN === NaN // false
typeof 2 * 3 // NaN
typeof 2 + 3 // "number3"
typeof (2 + 3) // "number"
typeof typeof 2 + 3 // "string3"
a+++b // (a++) + b
let x = (a = 1, b = 3) // x=3
let y = !!"Hello" + (!"world", !!"from here!!") // y=2
4. 数据类型转换
- if(表达式) {}
- 括号里的表达式会被强制转换为boolean类型
- 关于 x==y 的判断
"" == 0 // true
" " == 0 // true
"" == true // false
"" == false // true
" " == true //false
!" " == true // false
!" " == false // true
"hello" == true // false
"hello" == false // false
"0" == true // false
"0" == false // true
"00" == false // true
"0.00" == false // true
undefined == null // true
{} == true // false
[] == true // false
var obj = {
a: 0,
valueOf: function(){return 1}
}
obj == "[object Object]" // false
obj == 1 // true
obj == true // true