数据类型
基本值类型
String
Number
boolean
undefined
null
对象类型
Object 任意对象
Function 可以执行
Array 有下表,内部数据有序
typeof 返回值是字符串,string,object等。
0、js中,一个.js文件就称为一个module,module和module之间通过import进行互相引用
1、let var const的区别
var是方法级别作用域,可以未声明先使用,此时值为undefined,你可以在方法中的多层嵌套的块中定义一个var变量,然后在最外层使用。
let是块级别作用域,不可以未声明先使用,会报错,只能在当前定义的块中使用,当然块可大可小,可以是全局的块。
const是块级别作用域,作用域和let性质一样,定义以后不能重新赋值。
2、export、import关键字作用
export
可以导出的内容包括类、函数以及var、let和const修饰的变量,export命令可以出现在模块的任何位置,只要处于模块顶层就可以。如果处于块级作用域内,就会报错,import命令也是如此。
每个模块仅有一个default的导出,导出内容可以是一个function、class,object等。
需要一次export多个对象时,可以使用{},如:export {firstName, lastName, year};
export时可以重命名:export {v1 as streamV1,v2 as streamV2};
3、Function.prototype.bind
bind() 函数会创建一个新函数,新函数与原函数具有相同的函数体,新函数的this值由bind()方法的第一个参数指定。
window.requestAnimationFrame(f)函数的意思是在下一次帧渲染前执行指定的回调函数,这个效果只有一次,通常需要我们自己在回调函数里再次调用window.requestAnimationFrame(f)从而形成不停的循环。
4、ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入Symbol
的原因。参考这。
var race = {
protoss: Symbol(),
terran: Symbol(),
zerg: Symbol("zerg")
}
5、es6中有了class关键字,且可以定义成员变量,但是没有访问控制功能,所有成员变量的访问控制都是pubic, 定义 public 成员变量的方式有2种,一是在成员方法中用this.xxx或者在class内直接用xxx。
private变量的定义有2中方式,一是在js文件下class外的变量,hasChild = false;二是可以使用Symbol,在js下class外定义,const weight = Symbol( 'weight');
6、数组[]的shift()的作用是删除第一个元素,并返回删除的元素var fruits = ["Banana", "Orange", "Apple", "Mango"]; var delell = fruits.shift(); // Banana
7、触摸事件
事件名称 | 描述 | 是否包含 touches 数组 |
touchstart | 触摸开始,多点触控,后面的手指同样会触发 | 是 |
touchmove | 接触点改变,滑动时 | 是 |
touchend | 触摸结束,手指离开屏幕时 | 是 |
touchcancel | 触摸被取消,当系统停止跟踪触摸的时候触发 | 否 |
8、! !! !!!
!用来取反,!null=true,!undefined=true,!''=true,!100=false,!'abc'=false
!!是两个取反的叠加,效果是用来判空,如果一个对象为null或undefined或空字符或0就返回false,如果有值就返回true
!!!