by a friend:xuxin
1. 语法、值、对象、变量
语法
Unicode字符集
区分大小写
可选的分号:return ++ --等必须放在一行;
var i=1
+2
return
true
注释:JavaScript还能识别"<!--",如使用"//"一样。
直接量(literal):/regex/
标识符规则:字母、下划线$符号开头。
保留字
值
原始值:存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。( Undefined、Null、Boolean、Number)
Undefined,Null声明但未赋值的变量是值undefined。引用了未定义的属性、函数无明确返回值时,返回的也是值 "undefined",undefined等于null但表示的意义不同。
数字类型 64位的浮点数;Infinity 表示所有超出临界值的值,有正负之分;alert(-2E300);
NaN表示非数(Not a Number)。一般说来,这种情况发生在类型转换失败时。他不与任何值相等包括他自己。出于这个原因,一般不使用 NaN 值本身。isNaN()接受对象时先试图转换为原始值再判断。
字符串类型是常量,一旦创建就不可更改,可看作是行为与基本类型相似的引用类型。
一对一的关系
基本类型的包装对象
String Boolean Number
直接使用原始型调用对象的方法和属性。JavaScript自动将String原始型转换成一个临时的String对象,调用其方法在丢弃这个临时对象。
如 “asdf”.length ;(123).toString(); false.valueOf();
强制转换
以函数形式调用Boolean(),String(),Number().将参数强制转换成相应的原始型。
Number():Number(“123aa”) 尝试先valueOf ,parseInt/parseFloat(“123aa”) 尝试先toString(); 转换Date()可以看出
String() 调用参数的toString方法,如果是null或undefined则返回对应的字符串表示
Boolean() 如果该值是空字符串、数字 0、undefined、NaN、 或 null,它将返回 false;
对象是可变的键控集合(keys collections)
键值是字符串(变量)
访问属性的方式:2种 .的局限性 更直观
创建:new Constructor(); {} 字面量
数组
一种特殊的对象;稀疏的;arr[100];
数组的创建;[];new Array(2,3,4); new Array(2) != [2]
Date,正则表达式对象
变量
无类型 var
声明: 重复声明,隐式声明(给未声明的变量赋值,全局变量)
全局、局部作用域,没有块级作用域,变量声明在整个函数体都是有定义的。
作为属性的变量:全局变量是全局对象的属性,局部变量是一个完全独立的对象(称为调用对象,创建执行环境时定义的)的属性。
无用存储单元的收集。
2. 运算符和运算符
===类型相同
== 执行类型转换的规则如下:
如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
字符串==数字,在检查相等性之前,要尝试把字符串转换成数字。
对象= =字符串,在检查相等性之前,要尝试把对象转换成字符串。
对象= =数字,在检查相等性之前,要尝试把对象转换成数字。
在比较时,该运算符还遵守下列规则:
值 null 和 undefined 相等。
在检查相等性时,不能把 null 和 undefined 转换成其他值。
如果某个运算数是 NaN,等号将返回 false,非等号将返回 true。
如果两个运算数都是对象,那么比较的是它们的引用值。
比较运算时会试图将对象转换为数字或字符串
In运算符
字符串 in 对象
hasOwnProperty
Typeof :typeof O:返回字符串
基本类型,也区分对象和函数
typeof对未定义的变量运算时也显示undefined。null
Instanceof:O instanceof F:调用F函数的[[HasInstance]]内部方法,该方法递归寻找对象O的原型链 让其与F.prototype属性比较如果相等就返回true。
New
Delete
删除对象的属性,数组元素,隐式定义的变量。
Delete 运算符不会作用域原型链的属性
void
表达式返回undefined
3. 语句
with 语句用于设置代码在特定对象中的作用域。
它的语法:
with (expression) statement
例如:
var sMessage = "hello";
with(sMessage) {
alert(toUpperCase()); //输出 "HELLO"
}
在这个例子中,with 语句用于字符串,所以在调用 toUpperCase() 方法时,解释程序将检查该方法是否是本地函数。如果不是,它将检查伪对象 sMessage,看它是否为该对象的方法。然后,alert 输出 "HELLO",因为解释程序找到了字符串 "hello" 的 toUpperCase() 方法。
提示:with 语句是运行缓慢的代码块,尤其是在已设置了属性值时。大多数情况下,如果可能,最好避免使用它。
4. 函数和对象
function fun(){};//function 语句
var fun = new Function(arg1,arg2,…..,funcBody)//构造函数
var fun = function(){};//函数直接量
调用对象添加到作用域链头
Arguments参数:参数列表,是调用对象的一个属性,是一个对象(非数组)拥有length及“0”“1”…等属性。
arguments.length实际的参数个数。fun.length形参的个数。
callee属性
函数的属性和方法
length属性
prototype 原型属性
fun.call(obj,a,b)apply(obj,arr)
函数的自定义属性 函数的静态变量
方法调用:函数时一个对象的属性时,称之为方法。object.fun();会将object绑定this关键字。
返回:return用于返回值,若没有指定则返回undefined
构造器调用模式:new fun();
Apply调用模式:fun.apply(obj,arguments_array),obj绑定this,调用fun函数。
内部函数中的调用(局部函数变量)是函数调用:其中的关键字this绑定到全局变量。作者称其为一个设计上的错误,它应该绑定外部函数中的this。