js高程(2)

js高级程序设计(
1. var lang="java";lang=lang+"script";//首先创建一个容纳10个字符的新字符串,填充"java""script",最后销毁"java""script"(后台发生)
2.var b=011;alert(b.toString());//9
    var b=011;alert(toString); //object Window
    var number=10;num.toString();//10,num.toString(2);//1010,num.toString(16);//a
    true反true,
   null和undefined没有这个方法
3. String()方法null反"null",undefined反"undefined";
4.a=11+" "把某个值转换为字符串;
5.var o=new object;//有效但不推荐
6.object属性方法
js高程(2)
7.ECMA-262不负责定义宿主对象(DOM,BOM中的对象),宿主对象可能不会继承object
8.自增自减布尔值时先转换为0/1;对象时,先调用对象的valueOf()方法,结果是NaN则调用toString()方法后再应用前述规则
    var f=1.1;f--;//0.100000000000009 出错     
    var o={valueOf:function(){return -1;}};o--;//-2
9.s=+s //将s转化为数值,同Number()
10.位操作符,第32位不再表示符号,
11按位非操作符~,~25//-26;(按位取反)
12.按位且var a=25&3;alert(a);//1,25=(0001 1001)2,3=(0000 0011)2,就一位同为1(0000 0001)
13.按位或var a=25|3; alert(a);//27,(0001,1011)
14.按位异或^,
15按位左移var a=2;//(10)2
                   var b=a<<5;//(1000000)2=64,左移不会影响符号位
16.按位右移>>,负数无符号右移-64>>>5;//11111111111000000->000001111111111110
17.逻辑非!逻辑或|| 逻辑与&&,逻辑&&不一定返回布尔值,
    (第一个数对象,返回第二个操作数;
        第二个操作数为对象,只有在第一个求值结果为true时,返回第一个操作数;
        两个操作数都为对象,反第二个对象;
        有一个操作数是NaN/null/undefined反NaN/null/undefined(NaN,null,undefined混用,反第一个
)用未定义的变量//会发生错误
18.0/0//反NaN,0/12//反infinity
19.12%0//NaN,infinity%infinity//NaN,infinity%infinity//NaN,12%infinity//12;
20.infinity+(-infinity)//NaN,-0+0=+0,null+" "//"null",undefined+" "//"undefined",1+undefined//NaN,5+"5"//"55",
"sum is"+5+5;//"sum is 55","sum is"+(5+5);//"sum is 10"
21.Infinity-Infinity;//NaN,-Infinity-(-Infinity);//NaN,+0-+0;//+0,+0-(-0);//-0,-0-(-0);//+0,字符串布尔值null undefined调用Number()转换,出现NaN的减法//NaN,对象无valueof()时调用toString();
22.两个字符串比较时,比较字符编码值"Brick"<"alph";"23"<"3","23">3,"a"<3//false,"a"转换成NaN,任何数与NaN比较都为false;
23.相等和不相等--先转换再比较,null和undefined是相等的,比较相等前不能将null undefined转换成其他数值null==0;//false undefined==0;//false,操作数中含NaN反false
24.全等不全等--仅比较而不转换,"55"===55//false,null===undefined//false,推荐使用全等
25.自增减,简化赋值操作,不会带来 任何性能提升
26.var n=(5,1,0);//0
27.for(var i=0;i<3;i++){};alert(i);//3循环外部仍然可以访问
    for(;;){}//无限循环
28.for(var p  in w){}//var不是必须的,但推荐使用var
29.如果表示要迭代的对象的变量值为null或undefined,会出错(ES5不抛出错误,但不执行循环体),保证兼容性,循环前确认该对象非null,undefined;
30.Safari3以前的版本for-in语句可能会导致某些属性被返回两次;
31.label标签,label: continue<continue label(break)<break label,使用时加描述性标签,不要嵌套过多的循环
32.with(location){var a=b.sub();} 同 var a=location.b.sub();//严格模式不允许,大量使用性能下降
33.可以再switch语句中使用任何数据类型,每个case可以使变量常量表达式。。。
    比较时使用全等操作符
34任何函数任何时候都可以通过return语句后跟要返回的值实现返回值,
    return语句后面的代码永远不会执行,
    return语句不带任何返回值时,返回undefined,一般用在需要提前停止函数执行而又不需要返回值的情况下
    推荐:要么函数始终都返回一个值,要么永远都不要返回值
35严格模式:不能把函数和参数命名为eval或arguments,不能出现两个命名参数同名
36arguments对象的length属性可以获知多少个参数传递给了函数;
37.function Add(num1,mun2){arguments[1]=1};//arguments[1]同mun2,会重写第二个参数,内存空间独立,值同步,修改命名参数不会改变arguments中的值,没有传递值的命名参数为undefined
    严格模式,若mun2==undefined,arguments[1]=1,mun值不变且不会执行
38.没有重载