字符集:Unicode字符集 JS:区分大小写 标识符:指变量、函数、属性名、函数名、函数参数 第一个字符:字母、下划线、$ 其后的字符:字母、下划线、$、数字 默认:驼峰命名 转义字符: \n 换行 \t制表 \b空格 \r回车 \f换页符 \\ \' \"
注释:单行// 多行 /**/
直接量: number、string、boolean、null、/RegExp/img
语句:以分号';'结尾(规范)
关键字、保留字:
do,while,for,in,continue,break,if,else,switch,case,default,with,try,catch,throw,true,false,null,var,new,delete,function,return,thistypeof,instanceof,void,debugger,finally//ECMAScript5新增关键字:class,const,enum,export,extends,import,super//严格模式下:arguments,evalimplements,let,private,public,yield,interface,package,protected,static
变量: var name = value; 重复声明(是合法且无害的,重复声明带有初始化器,就跟一条简单的赋值语句没有区别) 遗漏声明(严格模式没有声明变量,会报错。) 变量作用域: 函数作用域,声明提前: 作为属性的变量:当声明一个js全局变量时,实际就是定义一个全局对象的一个属性(应该是window下的一个属性)。当使用var声明一个变量时,创建的这个属性是不可配置的,也就是说这个变量不能通过delete运算符删除。(严格模式下) 作用域链 数据类型: undefined null boolean number string object
判断类型:
undefined: 1未定义 2定义了未赋值 3函数无return null:空对象指针(如果将来要用于保存对象,初始值为null) 注:使用.或者[]来存取undefined,null属性或方法都会报错 boolean: true false
假:0 "" false null undefined NaN
number:正无穷:Infinity 负无穷:-Infinity Number.MIN_VALUE~~Number.MAX_VALUE(-2的53次方~2的53次方) NaN isNaN() Number() parseInt() parseFloat()->string转number 十进制,十六进制(0x开头,0~9a~f),严格模式不支持八进制(0开头) 6.02e3 -> 6.02*10m³ Math对象,一些数学方法 注意小数的比较 var x = .3-.2; 0.09999999999999998 var y = .2-.1; 0.1 => x != y; 日期对象:Date()
string:''或者"" str 在ECMAScript5中,字符串可以多行显示,末尾用\
1 var str = "You need to be strong yet polite, \2 passionate yet objective, and nice to children, \3 the elderly";
str.length toString() (null、undefined没有这个方法) String() + 字符串连接
兼容用 str.charAt(num) 高级版本 str[num]
object: 全局对象:全局对象的初始属性并不是保留字,但应把他们当初保留字对待 包装对象:String();Number();Boolean(); null,undefined没有包装对象,访问他们的属性,方法会报错
var s = "test"; //创建字符串s.len = 4; //给他设置属性 临时创建字符串对象,并给其len属性赋值为4var t = s.len; //访问这个属性 -> undefined 通过原始的(没有被修改过的)字符串值创建一个新字符串对象,尝试读取len属性,这个属性自然不存在//这段代码说明在读取str,num,bool的属性或者方法的时候,表现的像对象一样,但如果师徒给其属性赋值,则会忽略这个操作:修改只是放生在临时对象身上,这个临时对象并未继续保留下来
1 var s = "text";2 var S = new String("text");3 4 alert(s == S); //true5 alert(s === S); //false 类型不同
不可变的原始值和可变的对象引用: 原始值:undefined,null,boolean,number,string 对象(引用类型):他的比较不是值得比较,即使两个对象包含相同的属性及相同的值,也是不等; 对象值都是引用,对象的比较都是引用的比较,当且仅当他们引用一个对象时,他们才想等
1 var a = [];2 var b = a;3 b[0] = 1;4 a[0];5 6 a === b;//true
如果想得到一个对象或者数组的副本,则必须显示复制对象的每个属性或数组的每个元素
1 var a = ["a","b","c"];2 var b = [];3 4 for(var i = 0,len = a.length; i
如果想比较两个单独的对象或者数组,则必须比较他们的属性或者元素。 定义一个比较两个数组的函数:
function compareArr(a,b){ if(a.length != b.length)return false; for(var i = 0,len = a.length; i < len; i++){ if(a[i] != b[i]) return false; } return true;}
类型转换:
原始值 转 对象:原始值通过调用String(),Number(),Boolean(); 显示类型转换:就是调用Boolean(),Number(),String(),Object() 除了null,undefined之外任何值都有toString()方法 number->string 方法:num.toString(),num.toFixed(),n.toExponential(),n.toPrecision() string->number 方法:Number(),parseInt(),parseFloat() 对象 转 原始值:(不懂) object->boolean all true object->string(number)通过一个方法来完成 所有的对象都继承了两个转换方法:toString()->返回一个反应这个对象的字符串 valueOf()->