js 数据类型:
3 种基本的类型;数字,字符串和布尔值。
2 种小数据类型: null 和 undefined . ( 为什么叫小数据类型?因为他们只定义了一个值 )
1 种复合类型: object. ( 在这个类型中,它的值可以是基本数据类型,也可以是复合类型,比如其他的 object. )
注意:在对象中有一个特殊的对象 ----function.( 它是一个可以执行代码的对象 .)
其他的一些对象 :
数组:
Date 类 : 是日期的对象。
RegExp 类: 正则表达式的对象。
Error 类: js 中发生错误的对象。
2 个有用的函数: isNaN() 和 isFinite()
isNaN() : 用于检查其参数是否是非 数字值。 // 提示:是非数字哦。 (not a number)
document.write( isNaN (0) ) // 返回 false
document.write( isNaN (5-2) ) // 返回 false
document.write( isNaN ("Hello") ) // 返回 true
isFinite(number) 函数用于检查其参数是否是无穷大。
如果 number 是有限的,则返回 true. 如果 number 是 NaN( 非数字 ) 或者是无穷大,则返回 false;
字符串的简单操作例子:
var a = "cssrain";
var b = a.charAt(a.length-1); // 从字符串 a 中截取最后一个字符。 输出: n
var c = a.substring(0 , 2); // 从字符串 a 中截取第 1 , 2 个字符。 输出: cs
var d = a.indexOf('s'); // 从字符串 a 中查找 第一个 s 出现的位置。 输出: 1
从例子可以看出,基数都是从 0 开始的。
var e = a.substring( a.length-1 ); // 可以看出, substring 第 2 个参数不写的话,
// 默认 是到最后。
var f = a.substring( a.length-1 , a.length);// 等价于
3): 数字跟字符之间的转换:
数字转字符:
var number_to_string = number + “ ”; // 方法 1 :添加一个空的字符串。
var number_to_string =String(number); // 方法 2 :使用 String() 函数。
var number_to_string =number. toString(); // 方法 3 :使用 toString() 函数。
注: toString() 方法默认是以 10 进制转换。
如果要使用 8 进制转换可以 这么写: number. toString(8);
字符转数字:
ar string_to_number = Number(string) ; // 方法 2 :使用 Number () 函数。
var string_to_number = parseInt(string) ; // 方法 3 :使用 parseInt () 函数。
方法 1 中不能 用 string+0 ; 这样会导致字符串拼接,而不是类型转换。
方法 2 中的 Number 函数转换,比较严格。
比如:
var a = "19cssrain86";
var b = Number(a); // 输出 NaN.
如果我们使用方法 3 。
var c = parseInt(a); // 输出 19
可以看出 parseInt() 会自动忽略非数字的部分。
parseInt() 只取整数部分,忽略小数部分。
parseFloat() 会把小数部分也取到。
和 toString() 一样, parseInt 也有进制,默认是 10 进制。
如果想使用 8 进制,可以这么写: parseInt( “077” , 8 ); // 输出 63 = 7 * 8 + 7
当字符以 0 开头的时候,我们必须把 第二个参数 指明,不然 js 可能会以 8 进制去转换。
4): 布尔类型:
布尔在数字环境中: true 转换为 1 , false 转换为 0 。
在字符环境中: true 转换为 “true” , false 转换为 “false” 。
布尔转换:
var x_to_Boolean = Boolean(x); // 方法 1 :使用 Boolean () 函数。
var x_to_Boolean = !x; // 方法 2 :使用 感叹号。
5): 函数的定义:
方法 1 :普通定义
function square(x){
return x*x;
}
方法 2 :函数直接量定义
var square = function(x){ return x*x; } // 推荐使用
方法 3 :构造参数
var square = new Function(“x”,”return x*x;”); // 效率低
6): 对象:
如果有一个名为 cssrain 的对象 , 他有一个高度 height 的属性。
那么我们可以这么引用:
cssrain.height;
还可以使用关联数组 定义: cssrain[“height”];
创建对象:
方法 1 :
var point = new Object();
point.x = 3;
point.y = 5;
方法 2 :使用对象直接量
var point = {x:3 , y:5 }
当然 json 也可以咯。
对象在字符的环境下,会调用 toString() 方法。
数字环境下,会调用 valueOf() 方法。
布尔环境下,非空 对象为 true;
7): 数组:
常规数组:以非负整数做为下标。 image[0]
关联数组:以字符做为下标。如: image[“width”]
js 不支持多维数组,但数组里面可以嵌套数组。
创建数组:
方法 1 :
var a = new Array();
a[0] = “1”;
a[1] = 2;
a[2] = { x:1, y:3};
方法 2 :
var a = new Array(“1” , 2 , {x:1,y:3} );
注意下:如果只传了一个参数;比如 var a = new Array(3);
那么它是表示: 3 个未定义元素 的 新数组。
方法 3 :使用数组直接量
var a =[“1” , 2 , {x:1 , y :3 }]; // 注意外面的 括号 , 不是花 括号。
8):null 和 undefined :
null 表示无值;
undefined : 使用一个并未声明的变量,或者使用了已经声明的变量但未赋值或者使用了一个并不存在的属性。
undefined==null
如果要区分:
可以使用 === 或者 typeof 运算符。
4, 比较运算符:
要注意的就是字符串是进行琢个比较 。
而且会区分大小 写。
如果你的需求是不区分大小写:
可以使用 String.toLowerCase() // 纯小写
String.toUpperCase() // 纯大写 转换后 ,然后再去比较 .
5, in 运算符:
要注意的是:左边的值是其右边对象的属性。
比如:
var a = { x : 1 , y : 2 };
var b = “x” in a ; // true
var c = “toString” in a ; // true . 左边的值是其右边对象的属性。
6 instanceof 运算符:
要注意的是:左边的运算数是一个对象,右边的运算数是对象类的名字。
比如:
var a = new Date()
a instanceof Date; // true
a instanceof Object ; // true
a instanceof Number ; // false
8, typeof 运算符:
要注意的是:由于 typeof 对所有的对象和数组都是返回 object;
所以它只能区分对象和原始数据类型时才有用。
要区别一种对象类型和另一种对象类型,可以使用 instanceof 和 constructor 属性。
9, delete 运算符:
要注意的是:并不是所有的属性和变量都能删除。
比如:
用 var 语句声明的变量不能被删除。
另外 ; 当 delete 删除一个不存在的属性时,返回 true ;( ^_^ ,这个比较搞笑。)
var a = 1;
alert( delete a ); // 返回 false
alert( delete a.x ); // 返回 true
还有一个应该注意:
Delete 所能影响的只是属性值,并不能影响被这些属性引用的对象。
比如:
var my =new Object();
my.height = new Date();
my.width = my.height;
delete my.height ;
document.write(my.width);// my.width 仍然是引用 Date 对象
10,void 运算符:
void 的一个用途: 专门生成 undefined 值、
alert( void(0) )
alert( void(1) ) // 都输出 undefined
这里的 undefined 实际是 void() 运算后的 值 。
考虑到向后兼容性,用表达式 void 0 比使用 undefined 属性更有用 .