umber
0 “0” 不变 false N
NaN “NaN” 不变 false
Number
无穷
“InFinity” 不变
true
N
umber
umber
任意其他的数字
数字字符串值 不变
true
负无穷
“-InFinity” 不变
true
N
Number
True
“true”
1
不变
Bo
olean
an
对象
toString()
valueOf(),toString(),或NaN true
False
“false”
0
不变
Boole
不变
注:对于对象的转换,当在一个数字环境时JS首先调用该对象的Valu
eOf()方法,如果这个方法返回一个基本类型的值,这个值会被使用,然而在大多数情况下,valueOf()方法返回的是对象自己,在这种情况下,JS先使用toString()方法把对象转换为一个字符串,然后再试图把该字符串转换为一个数字。
3.13,3.14基本数据类型的包装对象
跟C#或JAVA里的包装对象是一样的,比如用一个字符串变量时使
用了一个字符串对象的方法或属性,JS会为这个字符串值内部创建一个String
包装对象.String对象替代了原始的字符串值。注意,这个对象中只是瞬时存在的,在用完以后就没有用了,系统会把它丢弃。
Var s=”asdf”;
Var len=s.length;//用长度属性。
注意:JS中函数的方法call(),apply(),可能还有其它的方法能被字符串常量,数字,布尔类型甚至null,undfined调用,为什么?因为包装对象啊!!!在这两个函数里面需要对象所以就把常量包装成对象了来调用对象,用完就丢掉!!jQuery中的的each方法循环对象的属性时就是用的这个特性。
3.15传值和传址
基本类型为Null,Undefinded,布尔型,数字。 引用类型为数组、函数、对象。
JS字符串是通过传址来复制和传递的,而它们是通过传值来比较的。可以说是既能是基本类型又是引用类型! 四、变量
4.1变量类型
JS是非类型的,也即变量可以存放任意类型的值。
4.2变量的声明
重复的声明和遗漏的声明
可以使用VAR语句重复声明一个变量不仅是合法的,而且也不会造成任
何错误。
如果尝试读一个未声明的变量的值,JS会生成一个错误。如果尝试给一
个用VAR语句的变量赋值,JS会隐式声明这个变量,但注意,隐式声明的变量总是被创建一个全局变量,即使该变量只是一个函数体内使用。
4.3变量的作用域
如果一个局部变量或函数的参数声明的名字与某个全局变量的名字相
同,那么就有效地隐藏了这个全局变量。
局部变量必须是用var语句,否则就是全局变量了。 4.3.1没有块级作用域
JS中没有块级作用域的概念,函数中声明的所有变量无论是在哪里
声明的,在整个函数中它们都是有定义的。实际这个说法对全局变量也是起作用的,例
Var scope=”global” Function f(){
Alert(scope);//displays “undefined”,not global Var scope=”local”;
Alert(scope); //displays “local”
} F();
局部变量在整个函数体内部都是有定义的,这就意味着在整个函数
体中会隐藏了同名的全局变量。虽然局部变量在整个函数体中是有定义的,但是在执行var语句之前,它是不会被初始化的。这个例子说明了把有的变量集中起来放置在函数的开头是一个好的编程习惯。
4.3.2未定义变量和未赋值变量
未定义变量就是没有被告声明过的,无论是显示声明不是隐式声明,
读取这样的变量会出错.
未赋值的变量是虽已经声明了,但是没有给它赋值!
4.6作为属性的变量
4.6.1全局对象
JS解释器开始运行时,它首先要做的事情之一就是在执行任何JS
代码之前,创建一个全局对象,这个对象的属性就是JS程序的全局变量。当声明一个JS的全局变量或函数时,实际上所做的是定义了那全局对象的一个属性。或者说用一个同名的属性来存储全局变量和全局函数。
此外,JS解释器还会用预定义的值和函数来初始化全局对象的许多
属性,如Infinity,parseInt,Math分别引用了数值infinity,预定义函数ParseInt()和预定义对象Math.
在程序的顶层代码(不是函数中的代码)可以用this关键字来引用
这个全局对象。
在客户端JS中,Window对象代表浏览器窗口,它是包含在该窗口
中的所有JS代码的全局对象,这个全局对象具有自我引用的window属性,它代替了this属性,可以用来引用全局对象。
4.6.2局部变量: 调用对象
内嵌的函数、函数的参数和局部变量是调用对象的属性。调用对象
是在函数运行时创建的!一般用完就释放,除非产生了闭包!
4.7深入理解变量作用域
在JS的顶层代码中,作用域链只由一个对象构成,那就是全局对象。
所有的变量都是在这一对象中查询的。如果一个变量存在,那么这个变量的值就是未定义的。在一个函数(非嵌套)中,作用域链由两个对象构成,第一个函数的调用对象,第二个就是全局对象。当函数引用一个变量时,首先检查的是调用对象,其次才检查全局对象。在嵌套函数的作用域链中可以后在三个或更多的对象,查找方式以此类推。
以上所说也就是一个函数在运行的时候的查询变量的情况的流程!这在闭包中也是这样的一个查找过程! 五、表达式和运算符
5.3算术运算符
1.除法运算符
在js中,由于所有的数字都是浮点型的,所以除法的结果也是浮点
型的(不像C++或C#中的那种除出来是整形!),除数是0的结果为正无穷大或负无穷,而0/0的结果则是NaN.
2.模运算符
取模操作的运算数通常都是整数,但它也适用于浮点数,如-4.3%2.
1=-0.1;
除了加号比较特殊外,其它减、除、模、一元减(-)、一元加(-)、递增运算符(++)、递减运算符(--)都会把非数字变成数字的!
5.4相等运算符
5.4.1相等运算符和等同运算符
判定==运算符比较的两个值是否相等。