基本数据类型:
Undefined 、Null 、Boolean、Number、和String
var 关键字 定义变量,省略var 则该变量变为全局变量
声明多个变量时,可用逗号分行隔开
typeof操作符 判断 类型
例: typeof 98;//number
Boolean 类型
String 类型非空字符串为true
Number类型 任何非零数字值为true
Object 任何对象为true
Number 类型
浮点数最高精度17位小数
不要用浮点数作为判断根据,因为存在误差。
NaN(Not a Number)
ECMAScript 中任何数字除以 0 都返回NaN。
任何涉及NaN的操作返回都是NaN,
而NaN 和 NaN比较也不相等。
isNaN( n ) 接受参数 判断是否是非数字,首先会尝试将非Number类型转换为Number 类型
Number();
parseInt();
parseFloat();
String 类型
转义符 \
ECMAScript 字符串的不可变性。
字符串一旦创建,他们的值都是不可变的。
字符串拼接操作时
var lang = "Java';
lang = lang + "script";
首先创建一个新的字符串,在放入Java和script ,最后销毁原来的字符串。
Object 类型
类似Java 是 所有对象的基类。
包含的属性和方法
Constructor
hasOwnProperty("propertyName"): 用于检查给定的属性 在当前对象实例中(而不是实例的原型中)是否存在。
isPrototypeOf(object): 用于检查传入的对象是否是另一个对象的原型。
propertyIsEnumerable(propertyName)用于价差给定的属性能否使用for-in 语句来枚举。
tolocaleString()
toString()
valueOf();
操作符
位操作符
+运算符
如果一个操作数是字符串,则将另一个操作数转换为字符串,然后将两个字符串拼接。
-运算符
与+运算符相反,会把字符串、布尔值、null、undefined在后台通过调用Number()函数将其转换为数值。如果转换的结果是NaN,则结果是NaN。
如果一个操作数是对象,则调用对象的valueOf()方法取得表示对象的该值如果对象没有valueOf()方法,则调用toString()方法转换为字符串,再通过Number()转换。
关系运算符
如果两个操作数都是字符串时,比较的是两个字符串对应的字符编码
比较字符串时,比较的是”ACSCII“顺序,比如”B” < "a","23"< "3"都是true;
字符与数字比较时, "a"< 3;
//false 因为"a” 被转换为NaN了。
如果一个操作数是对象,则调用这个对象的valueOf()方法。如果没有valueOf()方法,则调用toString()方法。
相等运算符
== 类型转换,向下转换。
如果一个操作数是布尔值,则比较相等之前,先转换为数值,false转为0 true 转为1.
如果是字符串与数值 判断相等, 则现将字符串转为数值。
如果是操作数是对象,另一个不是,则调用对象的valueOf()方法,用基本类型比较。
null 和undefinded是相等的。
如果有一个操作数为NaN,因为NaN不等于任何数,所以返回false.
如果两个操作数都是对象。则比较他们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true。
=== 不做类型转换(避免隐式转换,推荐使用===)
例:
var result = ("55" != 55); //false
var result2 = ("55" !== 55); //true
switch 语句
case 后可以用任何数据类型。
switch 比较时使用的是全等===操作符,因此不会发生类型转换。
for循环等循环
javascript 没有块级作用域
因此for循环等循环内部定义的变量可以在外部访问到。
for in
用来枚举对象的属性,因为对象存储属性是无序的,所以循环也是无序的。
使用之前应先检测该对象的值不是Null或undefined。
函数
return; --》返回undefined
理解参数
ECMAScript函数不介意传递进来几个参数,也不在乎传进来的参数是什么数据类型,也就是说,原本接受两个参数的函数,你可以传递0个或多个参数。
因为:EMCAScript中的参数在内部使用一个数组来表示的。函数接收到的始终是数组。而不关心数组中包含哪些参数。
在函数体内可以通过arguments对象来访问这个参数数组。例如:arguments[0],
arguments.length.
ECMAScript中所有参数传递的都是值,不可能通过引用传递参数。
函数没有重载
后声明的函数会覆盖掉前面的。