1、javascript的数据类型:基本数据类型和对象类型。
? ①、基本数据类型:字符串(String)、数值(Number)和布尔值(boolean)。
? ②、对象类型:对象、数组和函数。
? ③、类型转换,通常情况javascript引擎会自动根据上下文来猜测转换,不过要注意自动转换规则(注意:在对象
自动转换成boolean类型时,如果该对象为空(包括null、undefined和""),则转换成false,否则为true)。
? ④、类型检测:查看一个变量或者值的类型可以采用一元运算符typeof或二元运算符instanceof,区别在于后一个比
前一个更严格,例如:
var obj = ['1','2','3'];
alert(typeof(obj2));//打印Object(按理说应该打印Array)
alert(obj2 instanceof Array);//打印true
?
?2、运算符号,这里只说重点的。
? ①、中括号运算符([]):中括号([])运算符可用在数组对象和对象上,从数组中按下标取值:
a、声明创建空或默认值数组。
var arr = []或var arr = ['aa','bb'];
b、取数组成员值。
arr[0];
c、定义对象成员。
var obj = new Object();
obj['name'] = "张三";
d、取对象成员值。
obj['name']
当然,如果不知道对象obj中有哪些属性,可以通过下面这种方式遍历:
for (var key in obj) {
alert(key + " : " + obj[key]);
}
?
? ②、大括号运算符({})。
a、正常的组织js语句快,包括函数体。
b、声明并创建对象(一般而言[]用来创建数组,而{}用来创建对象)。
var obj= {name:'张三',sex:'男',age:4}
?
? ③、点运算符(.)。
a、访问对象内部的元素,相当于用中括号来访问对象内如的元素,要注意,在对象内部属性名本身含有.符号时,此时再
用.符号取访问该属性将会失效,有事还会造成不可预知的错误,因此在不能预知对象内各个属性名的情况下建议
采用[]来访问个元素。
例如:var obj = {people.name:'zhangsan',sex:'男'};
obj.peopel.name//无效
obj['people.name']//有效
?
? ④、== 和 === 以及 != 和 !==
== 为相等,而===为等同,相等操作符(==)会对两边的操作数做类型转换,而等同(===)则不会,===比==要严格,前一个
不但考虑值还考虑类型,而后一个一般只考虑值。
a、相等运算符(==)
如果操作数具有相同的类型,则判断其等同性,如果两个操作数的值相等,则返回true(相等),否则返回false(不相等)。
如果操作数的类型不同,则按照这样的情况来判断:
null和undefined相等。
其中一个是数字,另一个是字符串,则将字符串转换为数字,在做比较。
其中一个是true,先转换成1(false则转换为0)在做比较。
如果一个值是对象,另一个是数字/字符串,则将对象转换为原始值(通过toString()或者valueOf()方法。
其他情况,则直接返回false。
?
b、等同运算符(===)
如果操作数的类型不同,则不进行值的判断,直接返回false。
如果操作数的类型相同,分下列情况来判断:
都是数字的情况,如果值相同,则两者等同(有一个例外,就是NaN,NaN与其本身也不相等),否则不等同。
? 都是字符串的情况,与其他程序设计语言一样,如果串的值不等,则不等同,否则等同。
? 都是布尔值,且值均为true/false,则等同,否则不等同。
? 如果两个操作数引用同一个对象(数组,函数),则两者完全等同,否则不等同。
? 如果两个操作数均为null/undefined,则等同,否则不等同。
?
c、!=不等和!==不等同,则与==和===相反,这里不再细说。