ES 规范
ES5
ES5 规范即 ECMA-262 第 5 版,为目前市面上全副浏览器都能反对并运行的 js 版本,目前大部分浏览器都只实现了 ES6 的局部个性,只有谷歌浏览器可能 手动开启ES6 语法的齐全反对。所以以后的前端开发,不倡议在浏览器端间接运行 es6 语法的 js,但不代表不能够用高效的 es6 语法来开发前端,因为有 babeljs 这一将 es6 语法编译为向后兼容的 js 语法的工具。
ES6
ES6 规范即 ECMA-262 第 6 版,在兼容 ES5 的根底上,新增了大量的不便好用的新个性,例如箭头函数,迭代器,解构赋值等,并且 es6 对面向对象有着更好的反对,新增了 class 这一语法糖,以及高效且高可读性的异步解决模块 Promise
根底语法
变量
js 的变量申明只与变量的作用域无关,与变量的具体类型无关
- var
为 ES5 中的变量类型,具备 申明后在其所在函数域内都能失效(存在变量晋升景象)且 能反复定义 的特点,不倡议应用
- 申明后在其所在域内都能失效(变量晋升:代码块内定义,代码块外仍然能够调用;代码块:
{}
内的代码,蕴含{}
内的{}
)
function test() {console.log(varTest); // undefined
var varTest = 'test var OK.';
console.log(varTest); // test var OK.
}
function test() {if(1){var varTest = 'test var OK.';}
console.log(varTest); // test var OK.
}
- 可反复申明
function test() {
var varTest = 'test var OK.';
console.log(varTest); // test var OK.
var varTest = 'test var OK2.';
console.log(varTest); // test var OK2.
}
- let
为 ES6 中新增个性,具备 申明后只能在其所在代码块内失效 且同级代码块内不能反复定义 的特点
- 申明后只能在代码块内失效
function test() {console.log(letTest); // 报错 letTest is not defined
let letTest = 'test var OK.';
console.log(letTest); // 无奈运行到这一步
}
function test() {if(1){
let letTest = 'test var OK.';
console.log(letTest); // test var OK.
}
console.log(varTest); // 报错 letTest is not defined
}
- 同级代码块内不能反复定义
function test() {
let letTest = 'test var OK.';
console.log(letTest); // test var OK.
if(1){
let letTest = 'test var OK.2';
console.log(letTest); // test var OK.2
}
let letTest = 'test var OK3.';// 报错 'letTest' has already been declared
console.log(letTest); // 无奈运行到这一步
}
- const
和 let 的个性一样,不同之处在于申明后无奈进行从新赋值
let a=0;
a=2
const b=0
b=2 // 报错 Assignment to constant variable.
类型
js 六大根本类型:undefined
、string
、number
、object
、boolean
、function
;
undefined
:初始申明后未赋值的变量,对于null
和undefined
string
:字符串number
:数字,包含整数和浮点数object
:以<Key,Value>
格局标记数据,也就是赫赫有名的 JSON(JavaScript Object Notation)数据格式,已超脱出 JS 自身,成为计算机业界数据格式的一种规范boolean
:true or falsefunction
:在 js 中,函数是作为一种参数而存在的,尽管这种写法在其余语言中也能够实现,但在 js 中的实现最为不便,利用最为宽泛和灵便,在 js 的学习中,常常会遇到函数中的函数中的函数这类多层套娃的景象,会刷新大家对函数的意识
最初
js 是一种弱类型语言,只有在调用参数时才会判断参数的类型,不同的参数类型不影响其之间的运算,运算后果会由机器主动判断,例如
let a=0;
let b=1
console.log(a+b)//1
let c='1'
console.log(a+c)//01
编写代码时应尽量避免这种骚操作,不同类型的数据不要贸然进行运算,js 的这个特点只能作为应用小技巧
操作符
+-*/
根本的加减乘除,用于 number
类型数据计算,其中 +
也可用于字符串的拼接
++,–
自增、自减,同其余语言,++ a 则先加后调用,a++ 则先调用后加
&& | ||
&
:按位与&&
:与,从左到右开始判断,若其中某项返回undefined
、false
、0
等假值 ,则进行判断,返回true
或false
;故可用于条件判断执行单行函数,例如
var user; // 定义变量
(!user && console.log("没有赋值")); // 返回提示信息“没有赋值”
等效于
var user; // 定义变量
if (!user){ // 条件判断
console.log("变量没有赋值");
}
|
:按位或,也可用于 interface 或 type 编写时,限度变量参数的内容,例如
function open(info: string = "提醒",
type: "error" | "info" | "success" | "warning" = "info",
autoHideDuration: number = 3000,
open: boolean = true) {
return {
type: constant.OPEN_SNACK_ALERT,
data: {info, type, open, autoHideDuration}
}
}
||
:或,从左到右,判断每一项,若后果不为 false 则返回其中首个不为undefined
、false
、0
等假值,也能够用于为变量赋予默认值,例如
const a="haoye"
const b=a||"haoye" // 若 a 未被赋值,则 b 默认为 "haoye"
逻辑与和逻辑或运算符具备以下 2 个特点:
- 在逻辑运算过程中,长期把操作数转换为布尔值,而后依据布尔值决定下一步的操作,然而不会影响操作数的类型和最初返回后果。
- 受控于第一个操作数,可能不会执行第二个操作数。
< > <= >= === == !== !=
别离为:小于、大于、小于等于、大于等于、严格等于、不严格等于、严格不等于、不严格不等于(具体区别在此,倡议齐全摒弃不严格类型)
!
取反,若变量 a
为undefined
、false
、0
等 假值 ,则!a
为 true;若为其余,则 !a
为false
?:
条件运算符,格局同其余语言
b ? x : y
若 b 为真则执行 x,反之执行 y,(留神是”执行“,意为 b、x、y 能够换为有返回值的函数)
可用于变量判断赋值
const a = 2;
const b = a===2 ? 5:6 // a 若等于 2,则 b 等于 5,反之等于 6
假值
- false
- null
- undefined
- 0
- ” (空字符串)
- NaN