卓越2008

用一颗谦虚的心面对大家,用一颗坚定的心面对困难,用一颗执著的心面对理想,用一颗虔诚的心面对技术。

导航

2007-11-19

Posted on 2007-11-27 03:49  Casm  阅读(180)  评论(0)    收藏  举报

任何非空的对象用在布尔环境中都将转换为true哪怕是new Boolean(false)

大多数对象继承了Object的默认valueOf()方法,该方法只是返回对象自身,由于默认的valueOf()方法不会返回一个基本类型值,js接下来试图调用toString()方法把对象转换为一个数字:首先调用toString()方法,并把结果字符串转换为一个数字

数组的转换:数组的toString()方法把数组元素转换成为字符串然后返回这些字符串连接的结果,其中包括字符串之间的都好,因此一个没有元素的数组转换成为一个空字符串,从而转换成数字0,另外,如果数组只有一个元素并且是数字n,那么数组就转换成为一个表示n的字符串,这又会转换回数字n自身,如果数组包含多个元素,或者如果其中一个元素不是数字,数组就会转换成NaN

js中不明确的转换,+运算符和比较运算符,即对数字有效,对字符串也有效,因此放一个对象和这些运算符一起使用的时候,它应该转换为数字还是字符串依然不明确,在大多数情况下,js试图通过调用valueOf()方法来转换它,如果返回一个基本类型值,通常是一个数字,就是用这个值,然而通常alueOf()方法返回一个未转换的对象,在这样的情况下,js会场时调用对象的toString()来把对象转换成一个字符串,但是这条转换规则有一个例外:当一个Date对象和+运算符一起使用的时候,转换就会通过toString()方法执行,这种例外存在是因为Date+一起使用,几乎总是执行字符串连接,但是当Date和比较运算符一起使用,几乎总是要执行数值比较来判断

如果定义一个定制的valueOf()方法的对象,其行为可能有所不同,如果定义了一个返回数字的valueOf()方法,可以对自己的对象使用算术运算符,但是如果把对象和一个字符串相加可能无法得到想要的结果;toString()方法不再被调用,并且表示alueOf()所返回的数字的字符串会和该字符串连接起来

Js基本规则:基本数据类型通过传值来操作,而引用类型,通过地址来操作

如果没有用var语句给一个变量指定初始值,那么虽然这个变量被申明了,但是在给它存入一个值以前,初始值为undefined

如果使用var语句多次声明同一个变量,那么它担当的不过是一个赋值语句的角色

如果尝试读取一个未声明的变量的值,那么会产生错误,如果尝试给一个未用var声明的变量赋值,那么会隐式声明该变量,但是该变量总是被创建为全局变量,及时改变量只在一个函数体中使用

Js变量没有块级作用域,函数中声明的变量,在整个函数中都可以使用,甚至向上

var s = “hello”;

var t = s.toUpperCase();//转换大小写

作用域连是由底向上的

1:按位取补码,"1" + 0 = "10",模运算结果的符号与除数相同

===运算符比较规则:

·                     如果两个值的类型不同,他们就不相同

·                     如果两个值类型都是数字,而且值相同,那么除非其中一个或两个都是NaN,否则他们是等同的,值NaN永远不和其它值相等,包括自身,要检测一个值是否为NaN,可以使用全局函数isNaN()

·                     如果两个值都是字符串,而且在串中同一位置上的字符完全相同,那么他们完全等同,如果字符串长度或内容不同,他们就不等同

·                     如果两个值都是true,或者两个值都是false,那么他们等同

·                     如果两个值引用的是同一个对象,数组或函数,那么他们完全等同,否则不等同,即使这两个对象具有完全等同的属性或两个数组有完全相同的元素

·                     如果两个值都是null或都是undefined,则他们完全等同

==运算符判断规则:

·                     如果两个值具有相同的类型,那么就检测他们的等同性,如果这两个值完全相同,他们就相等,如果他们不完全相同,则他们不相等

如果两个值得类型不同,他们依然可能相等,将用下面的规则检测他们:

·                     如果一个值是null,另一个值是undefined,他们相等

·                     如果一个值是数字,另一个值是字符串,把字符串转换为数字,再用转换后的值进行比较

·                     如果一个值是为true,将他转换成1,在进行比较,如果为false,先转换为0,再进行比较

·                     如果一个值是对象,另一个是数字或字符串,将对象转换成原始类型的值,再进行比较,可以使用对象的toString()或valueOf()吧对象转换成原始类型值,js核心语言的内部通常先尝试valueOf()转换,再尝试toString(),但是对已Date类,则先执行toString()

比较运算符只能比较数字或字符串,转换规则如下:

·                     如果两个运算数都是数字,或都被转换成为数字,那么将采取数字比较

·                     如果两个运算符是字符串,或者都被转换成了字符串,那么将作为字符串进行比较

·                     如果一个运算数是字符串,或者被转换成字符串,而另一个运算数是数字,或者被转换成了数字,那么运算符或将字符串转换成数字,然后执行数字比较,如果字符串不代表数字,那么他将被转换成为NaN,比较的结果是false

·                     如果对象可以被转换成数字或字符串,js将执行数字转换,比如可以从数字的角度比较字符串

·                     如果云算数都不能被成功的转换成字符串或数字,那么比较结果总是false

·                     如果某个运算数被转换成了NaN,比较结果总是false

in运算符要求其左边的运算数十一个字符串,或可以被转换为字符串,右边的运算数是一个对象或数组,如果该运算符左边的值是右边对象的一个属性名,则返回true

instanceof运算符要求左边的运算数是一个对象,右边的运算数是对象类的名称,如果该运算符左边的对象是右边类的一个实例,则返回true,如果左边运算数不是对象,或者右边运算数是一个对象而不是一个构造函数,则返回true,如果右边运算数根本就不是对象,将返回一个运行时错误

if (a == b) stop()与(a == b) && stop()作用一样

alert(null || undefined || 1)

位运算要求它的数字运算数是整型的,如果位运算用于非整型的运算数,或者太大以致不能用32位的整数表示的运算数,将返回NaN

a<<1左移一位,以0填充,a>>2右移2位,高位以符号位填充,a>>>4右移4位以0填充

typeof运算符返回运算数的类型

使用new运算符的时候,如果构造函数没有参数可以不写括号

delete运算符,删除运算数所指定的对象的属性、数组元素或变量,删除成功则返回true,并非所有属性和变量都可以被删除,某些内部的核心属性就不能被删除,用var语句声明的用户定义变量也不能删除,删除不存在的属性、数组、变量时,将返回true,删除它们不只是把他们设置为undefined,当删除一个属性后,该属性将不存在了,delete只影响属性,而不能影响被被这些属性引用的对象

void运算符,舍弃运算符的值

逗号运算符从左向右计算返回右边的值

object.attName如果指定的属性不存在则会返回一个undefined

当对象作用关联数组时,由于属性名是动态生成的,所以不能用"."只能使用"[]"

delete运算符:删除一个对象的属性

ECMAScript v3标准允许case语句后跟随任何表达式

case表达式是用===等同运算符进行判定的,而不是==运算符判定的,所以表达式必须在没有类型转换的情况下进行匹配

do…while要以分号结尾,这是因为do循环的结尾处是循环条件,而不是简单的用花括号标识的循环体结束

for (variable in object)语句提供了一种遍历对象属性的方法,循环主体对object对象的每个属性执行一次,在循环体执行之前,对象的每个属性名会被赋给变量,在循环体内部可以用“[]”来查询对象的值,变量可以是任意的表达式,只要它的值适用于赋值表达式左边即可,数组不过是一种特殊的对象,所以可以循环像枚举对象属性一样枚举数组下标,该循环没有置顶将对象的属性赋给变量的顺序,因为没有什么方法可以预先告知赋值顺序

continue不同含义:

l  while虚幻中,会再次检测循环开头的表达式,如果为true,将从头开始执行

l  do/while中,会跳转到循环的地步,在顶部开始下次循环之前,会再次先检测条件

l  for中,先计算增量,再检测表达式以确定是否执行下轮循环

l  for/in中,将以下一个赋给循环变量的属性名开始循环

一条函数定义创建一个新的函数对象,并且将这个函数对象存储在一个新创建的funcname的属性中

函数只能嵌套在函数中

函数定义描述的是静态程序结构,语句是在运行时执行的,而函数则是在实际运行前,当js代码被解析或者被编译时定义的,当js解析程序遇到一个函数定义是,它就做解析并存储构成函数的主体,然后定义一个和该函数同名的属性(如果函数定义嵌套在其他函数中,那么就在调用对象中定义这个属性,否则在全局对象中定义这个属性)以保存它

如果函数执行不带表达式的return,那么函数的表达式值就是undefined

异常:是一个信号,说明发生了某种异常状况或错误

抛出异常:用信号告知发生了错误或异常状况

捕捉异常:处理它,即采取必要或适当的动作从异常回复

无论try中有任何转移语句finally都会执行

with语句用来展示修改作用域链with(object)statement,该语句能够有效的将object添加到作用域链的头部,然后执行statement,再把作用域回复到原始状态