1.Number
① number.toExponential(fractionDigits) Math.PI.toExponential(2);//"3.14e+0" ② number.toFixed(fractionDigits) Math.PI.toFixed(3);//"3.142" ③ number.toPrecision(precision) Math.PI.toPrecision(3);//"3.14" ④ number.toString(radix) Math.PI.toString(8);//"3.1103755242102643"2.JS中%代表求余
36%10;//6 36%-10;//6 -36%10;//-6 -36%-10;//-63.函数可以指定一个参数列表,这些参数就像变量一样,当函数调用时由传入的实参(argument)初始化。
4.
(variable) (object) for name in expression枚举一个对象所有的属性名(键名),每次循环中object的下一个属性名(字符串)赋值给variable。 为判断该属性名为对象中的成员还是来自于原型链,应使用object.hasOwnProperty(variable) typeof(object.variable)!==’function’
5.JS中的对象是可变的键控集合(keyed collections)
6. ①在对象字面量中,如果属性名是合法的JS标识符且不是保留字,则不强制使用引号扩住属性名。
"first-name" //引号是必需的,因为连接符(-)是不合法的 first_name②如果想要检索对象中包含的值,可以通过[]后缀中括住一个字符串表达式的方式。如果该字符串表达式是字符串字面量,同时它是一个合法的JS标识符且非保留字,那么可以使用 . 点表示法进行检索。
var person={ name:'yyc', age:21 }; var dormitory={ num:403, "num-a":'yyc',//因为该属性名(键名)不合法,有连接符(-),所有带括个引号 member:{ tuhao:{ age:22, height:178 }, "hao-ren":{ //同上 age:23, height:178 }, } }; person.name;//"yyc" dormitory.tuhao.age;//undefined dormitory.member.tuhao.age;//22 dormitory.member.hao-ren;//ren is not defined dormitory.member["hao-ren"];//{age: 23, height: 178} dormitory.member.tuhao.age;//22---不过为了偷懒和避免错误,命名的名字符合字面量的规范(letter+[letter/number/_($)]) 1.利用 || 运算符的特性可以用来填充默认值, 因为 a || b ,如果a返回false,那么最终的结果就取决于b了 person.address;//undefined var a=person.address || 'none'; a;//"none" 2.尝试从undefined的成员属性中取值会导致TypeError person.address.road;//Uncaught TypeError: Cannot read property 'road' of undefined var b=person.address && person.addrss.road; b;//undefined7.&& 和 ||妙用
①&&,用于防止出错,"平稳退化" error && undefined ②|| ,用于初始化,"渐进增强" undefined || 'yyc'8.Syntactic sugar: from Wikipedia In computer science, syntactic sugar is syntax within a programming language that is designed to make things easier to read or to express. It makes the language “sweeter” for human use: things can be expressed more clearly, more concisely, or in an alternative style that some may prefer.
9.ES6 新特性
①Default Parameters var link = function(height, color,url){ var height = height || 50; var color = color || 'red'; var url = url || 'http://www.dangdang.com'; } var link = function(height=50,color='red',url='http://www.dangdang.com';){ //do something } ②Template Literals var block = '17宿'; var room = '403室'; var dormitory = 'My dormitory is ' +block+ ' ' +room+'.'; dormitory;//"My dormitory is 17宿 403室." //注意 ` ${} white-space dormitory = `My dormitory is ${block} ${room}.`;//"My dormitory is 17宿 403室." dormitory = `My dormitory is ${block}${room}.`;//"My dormitory is 17宿403室." ③Muiti-line Strings var info = 'aaaaaaaaaaaaaa,\n' + 'bbbbbbbbbbbbb,\n' + 'ccccccccccccc'; info; /* "aaaaaaaaaaaaaa, bbbbbbbbbbbbb, ccccccccccccc" */ //backticks反引号-----grave accent抑音符号--Wikipedia //优点:自动换行,字符串之间不需要额外连接符 var info = `aaaaaaaaaaaaaa, bbbbbbbbbbbbb, ccccccccccccc`; info; /* "aaaaaaaaaaaaaa, bbbbbbbbbbbbb, ccccccccccccc" */10.通过this可取得它们所属对象的上下文的方法称为公共方法(public method)。
11.调用一个函数会暂停当前函数的执行,传递控制权和参数给新函数。除了声明时定义的形式参数,每个函数还接收两个附加的参数:this和arguments。参数this的值取决于调用的模式: ①方法调用模式 ②函数调用模式 ③构造器调用模式 ④Apply调用模式
//1.方法调用模式---函数作为对象的一个属性,即一个方法 var yyc = { value : 0, increment : function(inc){ this.value += typeof inc ==='number' ? inc : 1; } }; yyc.increment(); yyc.value;//1 yyc.increment(2); yyc.value;//3 yyc.increment(3); yyc.value;//6 //2.函数调用模式 var add = function(a,b){ return a+b; }; var yyc = { value : 0, increment : function(inc){ this.value += typeof inc ==='number' ? inc : 1; } }; yyc.double = function(){ console.log(this);//{value: 0, increment: ƒ, double: ƒ} } yyc.double(); //测试1 var value=999; var add = function(a,b){ return a+b; }; var yyc = { value : 0, increment : function(inc){ this.value += typeof inc ==='number' ? inc : 1; } }; yyc.double = function(){ var f2 = function(){ alert(this.value);//999 } setTimeout(f2,1000); } yyc.double(); //测试2 var value=999; var add = function(a,b){ return a+b; }; var yyc = { value : 0, increment : function(inc){ this.value += typeof inc ==='number' ? inc : 1; } }; yyc.increment();//对象yyc中value值为1 yyc.double = function(){ var that = this; var f2 = function(){ alert(that.value);//1 } setTimeout(f2,1000); } yyc.double(); //避免让this的值指向全局value,从而实现double也就是1+1 var value=999; var add = function(a,b){ return a+b; }; var yyc = { value : 0, increment : function(inc){ this.value += typeof inc ==='number' ? inc : 1; } }; yyc.increment();//对象yyc中value值为1 yyc.double = function(){ var that = this; var f2 = function(){ that.value = add(that.value,that.value); } f2();//别忘记执行f2函数 } yyc.double(); yyc.value;//2