JS是一种基于原型的面向对象语言,它只有原型对象的概念,原型对象就是一个模板,新的对象从这个模板构建从而获取最初的属性,任何对象在运行时都可以动态的增加属性,而且,任何一个对象都可以作为另一个对象的原型,这样后者就可以共享前者的属性。
一、变量
var 声明一个变量
let 声明一个块作用域中的局部变量
const 声明一个常量
二、数据类型
number:数值型,包括整型和浮点型
boolean:布尔型,true和false
string:字符串
null:只有一个值null
undefined:变量声明未赋值的,对象未定义的属性
object:是以上类型的复合类型,是容器
ES是动态弱类型语言,虽然先声明了变量,但是变量可以重新赋值任何类型
弱类型:不需要强制类型转换,会隐式类型转换
变量的类型typeof()
三、模板字符串
模板字符串(Template String)是增强版的字符串,用反引号(`)标识,它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。
反引号(`)可以用作普通字符串,多行字符串,模板字符串
模板字符串中嵌入变量,要将变量名写在${}
之中。大括号内可以放入任意的JavaScript表达式,可以进行运算,以及引入对象属性。
四、函数
函数和匿名函数本质上是一样的,都是函数对象,只不过函数有自己的标识--函数名,匿名函数需要借助其他的标识。
使用函数表达式来定义函数,表达式中的函数名可以省略,如果这个函数名不省略,该函数名也只能在该函数内部使用
另:函数会声明提升,函数表达式则不会。
高阶函数:函数作为参数或返回一个函数
箭头函数:匿名函数更加精简的格式,如果没有参数,用();返回值中{}和return必须同时出现x=>{return x*2}或者{}和return都省略x=>x*2
函数的参数只做位置对应,可变参数用...args收集,所有的参数都会被保存在一个arguments的键值对字典对象中,若使用箭头函数,取到的arguments不是我们想要的
js提供了参数解构,使用...符号来进行解构
函数返回值:python中可使用return1,2返回多值,本质上也是一个值,就是一个元组;js的返回值是最后一个表达式的值,所以js的函数返回值依然是单值。
作用域:function是函数的定义,是一个独立的作用域,其中定义的变量在函数外不可见,var a=10可以提升声明,可以突破非函数的块作用域,但是不能突破函数;let a=10不能提升声明,而且不能突破任何的块作用域;a=100隐式声明不能提升声明,在’严格模式‘下会出错,但是可以把变量隐式
声明为全局变量,建议少用。
严格模式:使用’use strict‘,这条语句放到函数的首行,或者js脚本的首行。
五、this的坑
c++,java是静态编译型语言,this是编译期绑定,而js是动态语言,运行期绑定
观察函数调用的时候是否是普通函数的调用,若为普通函数的调用,此时的this是global,若没有绑定,得不到想要的结果,因此需要绑定。
ES6新技术,使用箭头函数,就不需要兼容this的问题
ES3 apply,call
ES5 bind
ES6 箭头函数
以上解决this问题的方法,bind方法最常用。