1、字符集:
Javascript采用Unicode字符集,支持地球上所有在用的语言。2、区分大小写:Javascript区分大小写,HTML不区分大小写。3、空格、换行、格式控制符:Javascript忽略空格、换行,可以采用整齐、一致的缩进来形成统一的编码风格。4、Unicode转义序列:使用6个ASCII字符来代表任意16位Unicode内码。这些Unicode转义序列均以\u为前缀,后跟4个十六进制数。5、注释://单行注释的一种方式/*单行注释的另一种方式*//*多行注释多行注释*/6、直接量程序中直接能使用的值1,2.1,"hello",true,null等7、标识符用来对变量或函数进行命名以字母、_,$开头8、保留字也就是关键字,程序中不能使用Javascript中的默认关键字比如break, delete, function, return, etc9、可选的分号如果语句独占一行,其后的分号可以省略。■ 类型、值和变量10、数据类型能够表示并被操作的类型称作数据类型。11、变量用来标识值得符号名称,可以通过变量获得值得引用。12、数据类型原始类型primitive type和对象类型object type。数字、布尔值、数字是原始类型。null和undefined是两个特殊的原始类型。对象是属性的键值对集合。数组array是特殊的对象,定义了专用的语法。函数也是特殊的对象,函数可看作相关联的可执行代码。13、构造函数使用new新建对象,称为构造函数。构造函数定义的对象可以看作是一个类。构造函数用来初始化对象。14、系统默认类Date代表日期的类。RegExp表示正则表达式的类。Error表示处理错误的类。15、内存管理机制解释器有自己的垃圾回收机制。当不再有任何引用指向一个对象,自动回收占用的内存资源。16、可变类型和不可变类型不可变类型值不可以修改,可变类型值可以修改。对象和数组属于可变类型。数字、布尔值、null和undefined属于不可变类型。字符串虽然可以看作是字符数组,但它是一个不可变类型。17、数据类型转换可以自由地进行数据类型转换。在期望使用字符串的地方使用数字,会将数字自动转换成字符串。18、变量是无类型的变量可以被赋予任何类型的值同样一个变量可以重新赋予不同类型的值全局变量和函数内变量19、整型直接量● 十进制整型直接量● 十六进制整型直接量,即以16为基数,以"0x"或"0X"开头,a-f或A-F表示10-15,比如0xff,就相当于15*16 + 15 = 255● 有些支持八进制,以0开头,推荐不使用20、浮点型直接量● 包含整数部分、小数点、小数部分● 还可以用指数计数法表示浮点,即在实数后跟字母e或E,3.02e23,表示3.02*10的23次方21、算术运算符● +, -, *, /,%● Math对象Math.pow(2,5) 2的5次幂Math.round(.6) 四舍五入Math.ceil(.6)向上求整Math.floor(.6)向下求整Math.abs(-2)绝对值Math.max(x, y, z)Math.min(x, y)Math.random()0和1之间的随机数Math.PIMath.E 自然对数的底数eMath.sqrt(3)平方根Math.pow(3, 1/3)立方根Math.sin(0), Math.cos, Math.atanMath.log(10) 10的自然对数...22、算术溢出溢出分为overflow, underflow,被零整除溢出不会报错Infinity表示正的无穷大-Infinity表示负的无穷大underflow是无限接近于零,分为0和-00处于零,报NaN,用来表示非数字值23、判断非数字值x!=x,当x且仅当x为NaN的时候,才为trueisNaN()函数也是相似的道理isFine(),当参数不为NaN,Infinity,-Infinity的时候返回true24、日期和时间new Date(2010,0,1)new Date(2010,0,1,17,10,30)new Date()getFullYear()getMonth()getDate()getHours()getUTCHours()25、字符串16位值组成,不可变,有序,序列字符串用来表示文本有长度length,索引从0开始Javascript并没有表示单个字符的"字符型"单引号中可以包含双引号双引号中可以包含单引号+字符串连接length属性charAt(0)charAt()subString(1,4)2到4号位值上的字符slice(1,4)2到4号位值上的字符slice(-2)最后2个字符indexOf("1")lastIndexOf("1")split(",")replace("","")toUpperCase()26、转义\n表示另起一行\反斜线转义27、RegExp()函数两条斜线之间的文本构成了正则表达式/^HTML/以HTK开始的字符串28、布尔值if(o),当o为undefined, null, 0, -0, NaN为时为false29、null和undefined用来描述空值,是关键字对null执行typeof返回object当作为参数传入函数,推荐使用null。undefined是变量的一种取值,表明变量没有被初始化。查询对象属性或数组元素返回undefined,表示属性或元素不存在。函数没有返回值,返回undefined。引用没有提供函数形参对应实参时会得到undefined。30、全局对象● 全局属性:undefined, Infinity, NaN● 全局函数:isNaN, parseInt, eval● 全局对象:Date, Regexp, String, Object, Array31、不可变原始值undefined, null, 布尔值, 数字和字字符串,是原始值,不可更改。原始值的比较是值的比较。32、可变的对象引用对象是可变的,对象的值是可以修改。对象的比较不是值得比的比较33、返回true的情形null==undefined"0"==00==false"0"==false34、一个值可以转换成另外一个值并不意味着两个值相等if(undefined)返回false,并不说明undefined和false相等35、显式类型转换使用Boolean(), Number(), String(), Object()等函数。Number("3")String(false)Boolean([])Object(3)null和undefined不能转化为对象36、隐式类型转换+ 作为字符串连接,把其中一个非字符串转换为字符串。!将操作数转化为布尔值并取反37、switch语句switch(n){ case 1: //语句 break; case 2: //语句 break; default: //语句 break;}38、whilevar count = 0;while(count < 5){ console.log(count); count++;}39、do/whilefunnction printArray(a){ var len = a.length, i = 0; if(len == 0){ console.log("empty"); } else { do { console.log(a[i]); } while (++i < len); }}40、forfor(var count = 0; count < 10; count++)var i,j;for(i=0, j=10; i < 10; i++, j--)41、for/infor(var pi in o)42、break退出循环for(var i = 0; i < a.length; i++){ if(a[i]==target) break;}43、break 标签, 退出非就近的循环var matrix = getData(); //得到一个二维数组var sum = 0, success = false;compute_sum: if(matrix){ for(var x = 0; x < matrix.length; x++){ var row = matrix[x]; if(!row) break compute_sum; for(var y = 0; y < row.length; y++){ var cell = row[y]; if(isNan(cell)) break compute_sum; sum += cell; } } success = true;}44、continuefor(var i = 0; i < data.length; i++){ if(!data[i]) continue;}continue也可跟标签45、throwfunction factorial(x){ if(x < 0){ throw new Error(""); }}46、try/catch/finallytry{ }catch(ex){ alert(ex);}46、withwith(document.forms[0]){ name.value = "";}把document.forms[0]临时挂在作用域上。47、debugger 临时调试function f(o){ if(o === undefined) debugger;}48、对象属性的无序集合。每个属性都是一个键值对。属性名是字符串,从这点上可以把对象看成字符串到值得映射。对象都有一个原型对象属性,实现"原型式继承",动态添加属性和方法。对象的属性名不能重复。49、对象直接量创建对象var empty = {};var book = { "main title": "" //属性名有空格必须用引号}保留字作为属性名,必须用引号。最后一个属性的属性值后的逗号可以省略。50、通过new创建对象var o = new Object();var a = new Array();var d = new Date();var r = new RegExp("js");51、Object.create()创建对象var o1 = Object.create({x:1,y:2});//创建普通的空对象var o = Object.create(Object.prototype);//等同于{}和new Object()52、通过原型继承创建一个新对象function(p){ if(p == null) throw TypeError(); if(Object.create) return Object.create(p); var t = typeof p; if(t !== "object" && t !=="function") thrwo TypeError(); function f(){} f.prototype = p; return new f();}53、对象属性的查询和设置给null或undefined设置属性值会报类型错误有一些属性是只读的,也不能设置。var a = book.author;var t = book["main title"];book.edition=6;book["main title"] ="";查询对象并不存在的属性不抛异常抛undefined:book.x; // undefined对象不存在抛异常:book.x.length//加判断防止抛异常或undefinedvar len = undeinfed;if(book){ if(book.x){ len = book.x.length; }}//一种更简洁的写法var len = book && book.x && book.x.length;54、删除对象属性delete book.author;delete book["main title"];delete只能删除自有属性,不能删除继承属性。删除成功或没有任何副作用返回true。55、检测对象属性var o = {x:1};"x" in oo.hasOwnProperty("x")56、遍历对象属性var o = {x:1, y:2};for(p in o){ console.log(p);}还可以对对象属性过滤。for(p in o){ if(!o.hasOwnProperty(p)) //跳过继承的属性 continue; }for(p in o){ if(typeof o[p] === "function"){ continue; }}57、对象属性getter和settervar o = { data_prop:value, get accessor_prop(){}, set accessor_prop(value){}}58、对象属性的特性用来表述属性的属性。Object.getOwnPropertyDescriptor({x:1},"x");Object.getOwnPropertyDescriptor(random, "someprop");59、对象的原型属性在实例对象创建之前就设置好的。Object.prototype查看对象的原型Object.getPrototypeOf(把对象作为实参)检测p是否是o的原型:p.isPrototypeOf(o)60、对象的类属性字符串,表示对象的类型信息toString()方法查询它61、对象的可扩展性表示是否可以给对象添加新属性Object.isExtensible()62、序列化对象将对象与字符串之间进行转换。把对象转换为字符串用:JSON.stringfy()把字符串转换为对象用:JSON.parse()63、对象的方法所有的对象从Object.prototype继承属性。toString()toLocalString()valueOf()64、数组数组是值的有序集合。每个值叫数组元素。每个元素在数组中的位置就是索引。65、创建数组var a = [];数组元素可以是直接量、表达式、对象var a = new Array();66、数组元素读写var a = ["world"];var value = a[0];a[1] = 3;67、稀疏数组数组的长度大于元素个数。a = new Array(5);68、数组元素的添加和删除a = [];a[0]="";a[1]="";a.push("");delete a[1]索引为1的位置不能再有元素69、数组遍历for(var i =0; i < keys.length; i++)for(var i = 0, len = keys.length; i < len; i++)for(var index in sparsArray)data.forEach()70、多维数组var talbe = new Array(10);for(var i = 0; i < table.length; i++){ tables[i] = new Array(10); for(var row = 0; row < table.legnth; row++){ for(col=0; col < tables[row].lenght; col++){ table[row][col] = row*col; } }}71、数组方法a.join("")a.reverse()s.sort() a.concat()Array.slice()获取数组片段Array.splice向数组插入或删除元素push()和pop()shift()和unshift()72、ECMAScript5中的数组方法forEach(),map(), filter(), every(), some(), reduce(), reduceRight(),indexOf(), lastIndexOf()73、判断数组类型Array.isArray([]), Array.isArray({})74、函数函数是一段代码。函数的形参像局部变量一样工作。函数调用会为形参提供实参的值。每次调用会有一个上下文。函数挂在对象上,就是对象方法。调用对象方法,上下文就是该对象。初始化一个新创建对象的函数交构造函数。函数就是对象,可以把函数赋值给变量,把函数作为参数,也可把函数作为属性值。函数可以被包含在函数内,外层的函数就是作用域,内层的函数可以使用作用域内的变量,这就是闭包。75、函数作为值函数可以赋值给变量,赋值给对象的属性,赋值给数组元素。//赋值给变量function square(x){ return x*x;}var s = square;//赋值给属性var o = { square: function(x){ return x * x; }}o.squre(6);//赋值给数组元素var a = [function(x){return x*x;},20];a[0](a[1]);76、自定义函数属性函数是特俗的对象,可以拥有属性。fn.counter = 0;function fn(){ return fn.counter++;}77、call()和apply()方法以对象o的方法来调用函数f。f.call(o)f.apply(o)f.call(o, 1, 2);f.apply(o, [1, 2])78、Function()构造函数var f = new Function("x", "y", "return x*y;");79、类基于原型的继承机制。类是动态可继承。类的所有实例对象都从同一个原型对象上继承属性。80、类和构造函数构造函数用来初始化新创建的对象。new调用构造函数。调用构造函数就是把prototype属性用作新对象的原型。function Range(from, to){ this.from = from; this.to = to;}Range.prtotype = { includes: function(x){ return this.from <=x && x <= this.to; }, foreach: function(f){ for(var x = Math.ceil(this.from); x <= this.to; x++) f(x); }};81、类原型的constructor属性var F = function(){};var p = F.prototype;var c = p.constructor;c===F82、类的继承class Animal{ constructor(voice){ this.voice = voice || ''; } speak(){ display(this.voice); }}class Cat extends Animal{ constructor(name, color){ super('Meow') this.name = name this.color = color }}var fulffy = new Cat('fluffy', 'White');fluffy.speak();