1.内在类型number,string,boolean,object,function,undefined,所以没有内置的Integer.parseInt,因为没有定义这个类
2Number类所有的值保存均为64位浮点,所以1===1.0,这里面有两个特殊的值NaN非数,Infinity,前者有IsNan方法,后者大于任何数
3、字符串不是对象,所以传递字符串也是拷贝传递,字符串表示为16位Unicode,可以用\u对应的转义码来表示字符
4、对于==:false,null,undefined,空字符串,数字0,NaN被当作false
5. 对于&&和||:对于||,如果第一个为假,则返回第二个值,如果第一个为真,则返回第一个;对于&&,如果第一个为假,则返回第一个值,否则产生第二个值
6.对象是拥有键值对,字符串不是对象,对象的检索如果引用不存在的键的值,会抛出TypeError,但是引用不存在的键,会得的undefined,不会抛出异常
7.每个对象都有一个原型对象,你可以制定该对象的原型对象,可以随便找一个对象作为原型,在JS世界中,你可以拷贝一个对象的灵魂。
8.函数也是对象,对象连接到Obejct.prototype,函数连接到Function.prototype。
9.函数的调用模式:方法模式,函数模式,构造器模式,apply模式。方法调用模式一般用于修改对象内部的变量的值(函数是对象的属性方法),函数调用模式this绑定到全局window,最为常见的方式,构造器模式JS对类的妥协,不推荐这种模式,apply模式最大好处修改this的值
10.参数是免费赠送给函数的,参数是一个伪数组,只有length属性
11 return语句返回函数,return空则为return undefined。
12.为JS内置类增加方法是可取的。String.prototype.method=function(s){//......return this;}
13.JS作用域是函数作用域,在函数内部定义函数外是看不到的,但不同的是在函数内部定义的可以在函数的任何位置看到。
14.闭包CLOSURE.一句话:函数可以访问它被在创建时所处的上下文环境(注意是访问,而不是拷贝,先关联,后访问)
15闭包最经典的例子:
var handlers =function(nodes){
var i=0;for(i=0;i<nodes.length;i++){
nodes[i].οnclick= function(i){
return function(e){
alert(e);
};
}(i);
}
1)onclick定义的是函数,所以函数执行体返回的是一个function
2)function()执行只是一个表达式,在执行后返回的函数给onclick赋值
3)nodes[i]中的i不存在闭包现象,因为i定义在同一个区域,而function里面的i存在闭包现象,因为有func作用域
16.JS中数组只是array-like,它没有数组一样的数据结构,他把下表转换成字符串作为属性,数组只是对象,但是有一个诡异的length属性
17JS中数组Array是一个伪类,他有方法
18.数组和对象何时用数组何时用对象要把握好
19.数组的length等于最大的整数属性+1,而不一定是数组属性的个数
20。判断一个对象是否是数组可以使用下面的语句
return value &&
typeof value=='objcet'&&
typeof value.length =='number'&&
typeof value.splice=='function'&&
!value.propertyIsEnumerable('length')
21,关于继承,只推荐原型继承:
if(typeof Object.beget!==='function'){
Object.beget=function(o){
var F= function(){};
F.prototype=o;
return new F();
}
}
22.要善于运用对象,有时候对象比数组更实用,有时候数组比对象更灵活。下面这个例子是统计文本中出现的各个单词的个数
function cnt(text){
var arr = text.split(/[\s,.\:]+/);
var res={};
for(var i=0;i<arr.length;i++){
if(typeof res[arr[i]] === 'number' && res.hasOwnProperty(arr[i])) res[arr[i]]++;
else res[arr[i]]=1;
} return res;
}