js 对象,键值对组成的无序集合,键是字符串,值是任意类型。
var aa = {ba:null},定义对象时,键无需引号
对象的属性访问,使用点或者[“key”],删除属性用 delete,判断属性是否存在用 in,”toString” in obj
模板字符串
var aa = “bb”test${aa}===”testbb”
字符串不可变,对索引赋值无效。
Array 的 sort 方法就地排序
// 遍历
- Map, Set, Array 都是 iterator 类型,可通过 for of 遍历元素
- for in 遍历的是对象属性的名称,Array 的索引可看作对象属性的名称。
- obj.forEach(function(e, i, objself){}) Map, e是value,i是key;Array e是元素,i是索引;Set e和i都是元素
- Array 遍历的另一种方法 map,返回另一个数组。
- filter 也可遍历,返回筛选后的数组,参数也是(e, i, objself)
// 作用域
var 最小作用域单位是 函数。let 解决了块级作用域问题。const 和 let 都具有块级作用域
全局对象,window
//解构赋值
数组解构赋值,交换
对象解构赋值,参数传递
要保证this指向正确,必须用obj.xxx()的形式调用
函数.apply(),函数.call(),能解决函数内部的 this 指向。apply 会将参数打包。
// 利用闭包封装一个私有变量
function foo(init_val) {
int x = init_val;
return {
inc: function(){x++; return x}
}
}
// 利用闭包冻结参数
// 箭头函数
()=>{}
箭头函数的this由上下文决定
// 面向对象
一个对象的原型是另外一个对象,没有类和实例的概念。通过Object.create 达到类似继承的效果。
var uu = {a:1}
var kk = Object.create(uu)
kk.proto === uu
function Student(props) {this.name = props.name || '匿名'; // 默认值为'匿名'this.grade = props.grade || 1; // 默认值为1}Student.prototype.hello = function () {alert('Hello, ' + this.name + '!');};function createStudent(props) {return new Student(props || {})}
// 浏览器对象
window,浏览器窗体,全局对象
screen,屏幕信息
navigator,浏览器信息
location,当前url信息
document,当前dom树
