- JavaScript是由Netscape(网景)公式开发的,JavaScript最初叫LiveScript。
- JavaScript是一种具有面向对象能力的,解释型的程序设计语言。JavaScript是一种松散类型语言,也就是说,它的变量不必具有一个明确的类型,可以把不同的数据类型赋值给var变量。
- 客户端的JavaScript是指嵌入了JavaScript解释器的Web浏览器。
- 客户端的JavaScript一部分是正式标准化的,其他部分是事实上的标准,而另一部分是特定于浏览器的扩展。
- JavaScript程序是用Unicode字符编写的,是大小写敏感的,会忽略程序中记号间的空格、制表符、和换行符。
- 如果在行末没有分号,JavaScript会自动在行的最后添加一个分号。如果有,则不添加。
- JavaScript注释:
1)//
2)/* ... */ - 标识符有字母、数字、下划线和$组成,数字不能开头。标识符不能呢关键字同名。
- JavaScript的基本数据类型:string、number、boolean。另外还有null和undefined以及复合数据类型--对象。一个对象表示的是值的集合,JavaScript的对象有两种,无序集合和有序集合,后者被称为数组。
- 特殊值的常量:
Infinity
表示无穷大的特殊值
NaN
特殊的非数字值
Number.MAX_VALUE
可表示的最大数值
Number.MIN_VALUE
可表示的最小数值
Number.NaN
特殊的非数字值
Number.POSITIVE_INFINITY
表示正无穷大的特殊值
Number.NEGATIVE_INFINITY
表示负无穷大的特殊值
- 直接量:
字符串直接量 由单引号或双引号括起来的Unicode字符序列。var s1 = "hello"; var s2 = "world"; 函数直接量 function后加用括号括起参数列表,接着是花括号括起来的函数体。var f = function(){ /*函数体*/ } 对象直接量 由一个列表构成,列表的元素是用冒号分隔的属性/值对,元素间逗号分隔,整个列表包含在华括号中。var obj = {name1:value2, name2:value2, ...} 数组直接量 由方括号括起用逗号分隔的序列。var a = [1, 2, "hello", true, , , false] - 数字转换为字符串(数字为var n,字符串为var s)
1)直接加一对引号:s = n + "";
2)使用String:s = String(n);
3)使用toString:s = n.toString(); - 字符串转换为数值(数字为var n,字符串为var s)
1)直接减去一对引号:n = s - "";
2)使用Number:n = Number(s); - null常被看作对象类的一个特殊值,如果一个变量的值为null,就说明他的值不是有效的对象、数组、数字、字符串和布尔值。
- undefined表示该变量没有被声明,或者已经声明但没有赋值。
- 区分null和undefined可以使用===或typeof。
- 类型转换
值 字符串 数字 布尔 对象 undefined "undefined" NaN false Error null "null" 0 false Error 非空字符串 不变 字符串的数字值或NaN true String 空字符串 不变 0 false String 0 "0" 不变 false Number NaN "NaN" 不变 false Number Infinity "Infinity" 不变 true Number -Infinity "-Infinity" 不变 true Number 其他数字 数字的字符串表示 不变 true Number true "true" 1 不变 Boolean false "false 0 不变 Boolean 对象 toString() valueOf(),toString(),或NaN true 不变 - 每个基本数据类型都有它自己的基本数据类型的包装对象。简而言之,有一个相应的对象类。
JavaScript可以灵活的将一种类型的值转换成另一种类型,当我们使用一个字符串时,JavaScript会为这个字符串内部的创建一个String包装对象。String对象就代替了原始的字符串值。由于对象具有属性和方法,因此可以在对象环境中使用简单的值。
当我们在对象环境中使用字符串时,要注意被创建的String对象只不过是瞬时存在的,它是得我们可以访问属性和方法,使用完后就没有用了,所以系统会将它丢弃的,假设一个字符串,我们可以使用如下代码获取它的长度:
var len = s.length;
s保存了一个字符串,原始的字符串是不会自行改变的。一个新的String对象被创建了,它是瞬时存在的,是得我们能访问length属性,之后就将它丢弃,原始的s并不会改变。
JavaScript的其他基本数据类型也是类似的,存在一个瞬态过程,以访问属性和方法。 - 函数的参数是局部变量,他们只在函数内部有定义。
- 函数中声明的所有变量,无论在哪里声明的,在整个函数中都是有定义的。
与下面等价var scope = "global"; function f(){ alert(scope); //显示 undefined var scope = "local"; alert(scope); //显示local } f();
var scope = "global"; function f(){ var scope; alert(scope); //显示 undefined scope = "local"; alert(scope); //显示local } f();
- JavaScript不需要手动的释放内存,它使用垃圾收集器来回收不用的内存。
- 在程序的顶层代码中,如不属于函数的代码,可以使用this来引用全局对象,在函数内部this则有别的用途。
- 完全相等运算符===的判定
1)如果两个值类型不等,它们就不等
2)如果两个值的类型是数字,而且值相同,那么除非其中一个或两个都是NaN,否则它们是完全相等的,NaN不与任何值相等,包括自身,可使用全局函数isNaN()检测一个值是否为NaN
3)如果两个值是字符串,如果长度和内容都相等,则完全相等
4)如果两个值是布尔值,都为true或都为false时完全相等
5)如果两个值是引用的对象,只有引用同一个对象时才完全相等
6)如果两个值都是null或都是undefined,它们完全相等 - 相等运算符==的判定
1)如果两个值有相同的类型,而且值也相同,则它们相等,否则不等
2)如果两个值类型不同,此时
——如果一个值为null,另一个值为undefined,它们相等
——如果一个值是数字,另一个是字符串,把字符串转换为数字再比较
——如果一个值是true,将它转换为1再进行比较;如果一个值是false,将它转换为0再进行比较
——如果一个值是对象,另一个值是数字或字符串,将对象转换成原始类型的值再进行比较。可以使用toString()或valueOf()把对象转换成原始类型的值。JavaScript通常先尝试valueOf()转换,再尝试toString()转换。但对于Date,则先执行toString()转换
——其他的数值组合是不相等的 - in运算符要求其左边的运算数是一个字符串,或可以被转换常字符串,右边的运算数是一个对象或数组。如果该运算符左边的值是其右边对象的一个属性名,返回true。
- instanceof运算符要求其左边的运算数是一个对象,右边的运算数是对象类的名字。
- new运算符用来创建一个对象,并调用构造函数初始化它。语法:newconstructor(arguments)。arguments用逗号分隔。如果函数调用时没有参数,可以省略括号。如
o = new Object; 与 o = new Object();等价。运算符new先创建一个对象,该对象的属性都未定义。接下来,它将调用特定的构造函数,传递指定的参数,此外还要把新创建的对象传递给关键字this。这样构造函数就可以使用this来初始化新对象。 - delete运算符:并非所有的属性和变量和属性都是可以删除的,某些内部的核心属性和客户端属性不能删除,用var语句声明的用户定义的变量也不能被删除。如果delete使用的运算数是一个不存在的属性,它将返回true。
- 逗号运算符(,)它先计算左边的参数,再计算其右边的参数,然后返回右边参数的值。
- 在switch语句中,default标签可以放置在switch语句的任何地方。