数据类型与类型转换,运算
- 原始类型:
- 6种原始类型: Undefined,null, Boolean,number, string
- Es6: symbol
- 引用类型:Object
- typeof运算符返回值:undefined, boolean,number, string, object, symbol
- 类型转换
- 转换成数字:parseInt, parseFloat,Number, ~~,+,

- 转换为boolean:!!, Boolean 【0, ‘’,null, undefined, NaN 转换为boolean值是false, 其余情况(对象,数组)为true】
- 比较运算符
- ==(比较之前进行类型转换)和=== (!= 和 !==)
- 如果一个操作值为布尔值,则在比较之前先将其转换为数值
- 如果一个操作值为字符串,另一个操作值为数值,则通过Number()函数将字符串转换为数值
- 如果一个操作值是对象,另一个不是,则调用对象的valueOf()方法,得到的结果按照前面的规则进行比较
- null与undefined是相等的
- 如果一个操作值为NaN,则相等比较返回false
- 如果两个操作值都是对象,则比较它们是不是指向同一个对象
-
字符串
-
Contract, indexOf,lastIndexOf, match, replace, search, slice, split, substr, substring, toLowerCase, toUpperCase, fontcolor() 等 charAt,charCodeAt, fromCharCode, es6.ruanyifeng.com/#docs/strin…

-
Array
concat(), join(),pop(),push(),reverse(),shift(),slice(), sort(),splice(),toSource(),toString(),toLocaleString(),unshift(),valueOf() -
2个索引方法:indexOf() 和 lastIndexOf();
-
5个迭代方法:forEach()、map()、filter()、some()、every();
-
2个归并方法:reduce()、reduceRight();
es6.ruanyifeng.com/#docs/array…
Object
function deepCopy(p, c) {
var c = c || {};
for (var i in p) {
console.log(i)
if(p.hasOwnProperty(i)){
if (typeof p[i] === 'object') {
c[i] = (p[i].constructor === Array) ? [] : {};
deepCopy(p[i], c[i]);
} else {
c[i] = p[i];
}
}
}
return c;
}
- 属性定义
Object.defineProperty(obj, prop, descriptor) 参数:
obj:目标对象
prop:需要定义的属性或方法的名字。
descriptor:目标属性所拥有的特性。
可供定义的特性列表:
value:属性的值
writable:如果为false,属性的值就不能被重写。
get: 一旦目标属性被访问就会调回此方法,并将此方法的运算结果返回用户。
set:一旦目标属性被赋值,就会调回此方法。
configurable:如果为false,则任何尝试删除目标属性或修改属性以下特性(writable, configurable, enumerable)的行为将被无效化。
enumerable:是否能在for...in循环中遍历出来或在Object.keys中列举出来。
- Call
Array.prototype.slice.call({0:1, 1:2, 2:3,length:5})
- Apply
var a = [10, 2, 4, 15, 9];
Math.max.apply(null, a);
- Bind
-- bind方法用于将函数体内的this绑定到某个对象,然后返回一个新函数
-- bind比call方法和apply方法更进一步的是,除了绑定this以外,还可以绑定原函数的参数
var add = function (x,y) {
return x*this.m + y*this.n;
}
var obj = {
m: 2,
n: 2
};
var newAdd = add.bind(obj, 5);
newAdd(5)
// 20
函数的继承
function Person(name, sex) {
this.name = name;
this.sex = sex;
}
Person.prototype.abc = 'abc';
function Teacher(name, sex, category){
Person.call(this, name, sex);
this.category = category;
}
Teacher.prototype = Object.create(Person.prototype);
Teacher.prototype.constructor = Teacher;
var aTeacher = new Teacher(1,2,3);
Object.defineProperty(aTeacher, 'is', {
value:false,
configurable: true,
enumerable: false,
writable: true
})
//console.log('Teacher', aTeacher)
console.log(Object.getOwnPropertyNames(aTeacher))
console.log(Object.keys(aTeacher))
console.log(Object.keys(Teacher))
var copyTeacher = _.cloneDeep(aTeacher);
//console.log('Teacher', Object.keys(Teacher))
console.log('copyTeacher', Object.keys(copyTeacher))
console.log('hasOwnProperty', aTeacher.hasOwnProperty('abc'))
console.log('aTeacher.__proto__: ' , aTeacher.__proto__); //Person
console.log('Teacher.prototype: ' , Teacher.prototype); //teacher1.__proto__ == Teacher.prototype
console.log('aTeacher.constructor: ' , aTeacher.constructor);
console.log('Teacher.prototype.constructor: ', Teacher.prototype.constructor); //teacher1.constructor == Teacher.prototype.constructor
//console.log('copyTeacher', copyTeacher)
//console.log('Person', Object.keys(Person.prototype))
var copyTeacher2 = {}
deepCopy(aTeacher, copyTeacher2);
console.log(copyTeacher2)
jsbin.com/sefehasoli/… es6.ruanyifeng.com/#docs/class…
- immutable.js 数据不可变
Function
Set, Map, WeakSet, WeakMap
Set数据唯一 WeakSet, WeakMap不可遍历
Cookie
- Localstorage Sessionstorage: