js数据类型
一、 js基本数据类型
JavaScript是弱类型脚本语言,声明变量时无需指定变量的数据类型。JavaScript变量的数据类型是解释时动态决定的。
但是JavaScript的值保存在内存中,也是数据类型的。
JavaScript基本数据类型有如下五个:
(1)数值类型
(2)布尔类型
(3)字符串类型
(4)Undefined类型
(5)Null类型
数值类型
与强类型语言如C、Java不同,JavaScript的数值类型不仅包括所有的整形变量,也包括所有的浮点型变量。
JavaScript语言中的数值都是以IEEE 754双精度浮点数格式保存。JavaScript中的数值形式非常丰富,完全支持用科学计数法表示。科学计数法形如5.12e2代表5.12乘以10的2次方,5.12E2也代表5.12乘以10的2次方。科学计数法中E为间隔符号,E不区分大小写。
注意:数值直接量不要以0开头。因为JavaScript支持八进制和十六进制。八进制以0开头,十六进制以0x或0X开头。当数值类型超出了其表述范围时,将出现两个特殊值:Infinity(正无穷大)和-Infinity(负无穷大。)
<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
// 显式声明变量a , b
var a , b;
// 给a , b使用科学记数法赋值,其值应该为500
a = 5E2;
b = 1.23e-3;
// 使用警告提示框输出变量a的值
alert(a + "\n" + b);
</script>
</body>
</html>
字符串类型
JavaScript的字符串必须用引号括起来,此处的引号既可以是单引号,也可以是双引号。
var a="12345678912aaa";
var a='12345678912aaa';
注意:JavaScript
和Java
中的字符串主要有两点区别:
(1)JavaScript
中的字符串可以用单引号括起来;
(2)JavaScript
中比较两个字符串的字符序列是否相等使用==即可,无需使用equals()
方法。
JavaScript以String内建类表示字符串,String类里包含了一系列方法操作字符串,String类有如下基本方法和属性操作字符串:(1)charCodeAt()
:返回字符串中特定索引处的字符所对应的Unicode值
(2)Legth()
:返回字符串的长度
(3)toUpperCase()
:将stringObj
中的小写字母全部转成大写字母(4)toLowerCase()
:将stringObj
中的大写字母全部转成小写字母(5)fromCharCode()
:直接通过String类调用方法,将一系列Unicode值转换成字符串
(6)indexOf()
:返回字符串第一次出现的位置
(7)lastIndexOf()
:返回字符串最后一次出现的位置
(8)subString()
:截取stringObj从start开始,至end为止之前的所有字符,即包括start处的字符,但不包含end处的字符
(9)slice()
:截取stringObj从start开始,到end为止之前的所有字符;即包括start处的字符,但不包括end处的字符。start与end均可为负值,当为负值时,表示从最后一个字符算起的第n个字符,比如-1表示最后一个字符,-2表示倒数第二个字符。
(10)match()
:在字符串内检索指定的正则表达式的匹配结果,该结果与regexp是否有指定全局标志g有关
(11)split()
:将separtor为为分隔,将stringObj分割成一个字符串数组。separator可以是字符串或者正则表达式,若为字符串,则以separator为分割符;弱separator为正则表达式,则以符合separator指定模式的字符串作为分隔符。
(12)replace()
:将字符串中某个子串以特定字符串替代。
<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
// 定义字符串变量a
var a = "abc中国";
// 获取a的长度
var b = a.length;
// 将系列的Unicode值转换成字符串
var c = String.fromCharCode(97,98,99);
// 输出a的长度,以及字符串a在索引4处的字符和
// 对应的Unicode值,以及c字符串变量的值,alert弹出提示框“alert提示信息”
alert(b + "---" + a.charAt(4) + "---"
+ a.charCodeAt(4) + "---" + c);
</script>
</body>
</html>
下面是一些常用的转义字符
布尔类型
布尔类型的值只有两个:true和false。布尔类型的值通常是逻辑运算的结果,或用于标志对象的某种状态。
<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
// 如果浏览器支持Cookie
if (navigator.cookieEnabled)
{
alert("浏览器允许使用Cookie");
}
// 如果浏览器不支持Cookie
else
{
alert("浏览器禁用Cookie");
}
</script>
</body>
</html>
null和undefined
Undefined
类型的值只有一个undefined
,该值用于表示某个变量不存在,或者没有为其分配值,也用于表示对象的属性不存在。null用于表示变量的值为空。Undefined
与null
之间的差别比较微妙,总体而言,undefined表示没有为变量设置值或属性不存在,而null表示变量是有值的,只是为其值为null。
但如果不进行精确比较,很多时候undefined
和null
本身就想等,即null== undefined将返回true。如果要精确区分null
和undefined
,应该考虑使用精确等于符(===)
<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
// 声明变量x , y
var x , y = null;
// 判断x的值是否为空
if (x === undefined)
{
alert('声明变量后默认值为undefined');
}
if (x === null)
{
alert('声明变量后默认值为null');
}
// 判断x(其值为undefined)是否与y(其值为null)相等
if (x == y)
{
alert("x(undefined)==y(null)");
}
// 测试一个并不存在的属性
if(String.xyz === undefined)
{
alert("不存在的属性值默认为undefined");
}
</script>
</body>
</html>
二、Object类型
JS中的对象其实就是一组数据和功能的集合。对象可以通过执行 new 操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性和(或)方法,就可以创建自定义对象,
如下所示:
var o = new Object();
这个语法与Java 中创建对象的语法相似;但在JS中,如果不给构造函数传递参数,则可以省略后面的那一对圆括号。也就是说,在像前面这个示例一样不传递参数的情况下,完全可以省略那对圆括号(但这不是推荐的做法):
var o = new Object;//有效,但不推荐省略圆括号
仅仅创建Object的实例并没有什么用处,但关键是要理解一个重要的思想:即在JS中,(就像Java 中的java.lang.Object对象一样)
Object类型是所有它的实例的基础。换句话说,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。
属性和方法
属性是与对象相关的值。方法是能够在对象上执行的动作。举例:汽车就是现实生活中的对象。
汽车的属性:
car.name=Fiat
car.model=500
car.weight=850kg
car.color=white
汽车的方法:
car.start()
car.drive()
car.brake()
汽车的属性包括名称、型号、重量、颜色等。所有汽车都有这些属性,但是每款车的属性都不尽相同。汽车的方法可以是启动、驾驶、刹车等。所有汽车都拥有这些方法,但是它们被执行的时间都不尽相同。
创建JavaScript对象
在JavaScript中,对象是数据(变量),拥有属性和方法。当您像这样声明一个JavaScript变量时:
var txt = "Hello";
您实际上已经创建了一个JavaScript字符串对象。字符串对象拥有内建的属性length。对于上面的字符串来说,length的值是5。字符串对象同时拥有若干个内建的方法。
属性:
txt.length=5
方法:
txt.indexOf()
txt.replace()
txt.search()
在面向对象的语言中,属性和方法常被称为对象的成员。JavaScript中的几乎所有事务都是对象:字符串、数字、数组、日期、函数,等等。你也可以创建自己的对象。本例创建名为"person”的对象,并为其添加了四个属性:
<!DOCTYPE html>
<html>
<body>
<script>
person = new Object();
person.firstname = "Bill";
person.lastname = "Gates";
person.age = 56;
person.eyecolor = "blue";
document.write(person.firstname + " is " + person.age + " years old.");
</script>
</body>
</html>
访问对象属性
访问对象属性的语法是:
objectName.propertyName
本例使用 String对象的 length属性来查找字符串的长度:
var message="Hello World!";
var x=message.length;
在以上代码执行后,x的值是:
12
访问对象的方法
您可以通过下面的语法调用方法:
objectName.methodName()
下面这个例子使用 String对象的 toUpperCase()方法来把文本转换为大写:
var message="Hello world!";
var x=message.toUpperCase();
在以上代码执行后,x的值是:
HELLO WORLD!
Object基本属性和方法
1、 constructor
:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)就是Object()。
2、 hasOwnProperty(propertyName)
:用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定,例如:o.hasOwnProperty("name")
3 、isPrototypeOf(object)
:用于检查传入的对象是否是传入对象的原型。
propertylsEnumerable(propertyName)
:用于检查给定的属性是否能够使用for-in语句本章后面将会讨论)来枚举。与hasOwnProperty()
方法一样,作为参数的属性名必须以字符串形式指定。
4、 toLocaleString()
:返回对象的字符串表示,该字符串与执行环境的地区对应。
5、 toString()
:返回对象的字符串表示。
6、 valueOf()
:返回对象的字符串、数值或布尔值表示。通常与toString()
方法的返回值相同。
三、typeof操作符
鉴于js
是松散类型的,因此需要有一种手段来检测给定变量的数据类型,typeof
就是负责提供这方面信息的操作符。对一个值使用typeof
操作符可能返回下列某个字符串:
“undefined”——如果这个值未定义;
“boolean”——如果这个值是布尔值;
"string”——如果这个值是字符串;
“number”——如果这个值是数值;
"object’——如果这个值是对象或null;
“function”——如果这个值是函数。
下面是几个使用typeof
操作符的例子:
<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
var message = "some string";
alert(typeof message); // "string"
alert(typeof(message)); // "string"
alert(typeof 95); // "number"
</script>
</body>
</html>
这个例子说明,typeof
操作符的操作数可以是变量(message),也可以是数值字面量。注意,typeof
是一个操作符而不是函数,因此例子中的圆括号尽管可以使用,但不是必需的。有些时候,typeof
操作符会返回一些令人迷惑但技术上却正确的值。
比如,调用typeof null
会返回"object
",因为特殊值null 被认为是一个空的对象引用。
Safari 5及之前版本、Chrome 7及之前版本在对正则表达式调用typeof
操作符时会返回"function
",而其他浏览器在这种情况下会返回"object"。从技术角度讲,函数在js
中是对象,不是一种数据类型。然而,函数也确实有一些特殊的属性,因此通过 typeof
操作符来区分函数和其他对象是有必要的。