学习笔记:Javascript数据类型和值

JS中有三种基本数据类型:数字、文本字符串和布尔值。除此之外还允许两种小数据类型:null和undefined【它们各自都只有一个值】。

除了基本数据类型,JS还支持复合数据类型:对象。对象是值的集合,这里的值可以是基本数据类型,也可以是其他对象。在一般的对象中,值的集合是无序的,但是在数组对象中,值被保存为有序的集合--虽然从根本上来说,数组对象也是对象,只是数组对象拥有很多相对一般对象所独有的特性和行为。另外,函数作为另一种特殊的对象,它也拥有很多独特的行为。所以我们可以将Array和Function看做两种特殊的Object。

另外,JS语言还自定义了一些专用对象,比如Date、RegExp和Error。它们不是新的数据类型,而是对象的新的类(class)。

[list]
[*]整数:JS中并不区分整数值和浮点型数值,所有的数字都由64位浮点值表示。整数有十进制、八进制和十六进制。八进制以0开头,十六进制以0x或0X开头。注意:不是所有的JS实现都支持八进制,如ECMAScript标准。
[*]浮点型:浮点数可以表示为[digits][.digits][(E|e)[(+|-)]digits]
[*]无穷大:Infinity和-Infinity,isFinite()用来检测一个数字是否是NaN、正无穷大或无穷大。非数字类型特殊值为NaN,它和任何数都不相等,即使是它自身。所以需要专门的函数来检测这个值:isNaN。
JS定义了这些特殊的常量:Infinity,NaN,Number.MAX_VALUE,Number.MIN_VALUE(非常接近0的一个正数),Number.NaN,Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY。程序中我们比较少直接使用Infinity,而是要指定是正为穷大还是负无穷大。
[/list]
看一些例子:

alert(isFinite(6));//true
alert(isFinite(Infinity));//false
alert(isFinite(Number.MIN_VALUE));//true
alert(isFinite(Number.POSITIVE_INFINITY));//false
alert(isNaN(Infinity));//false
alert(isNaN(0/0));//true


再来看看字符串:所谓字符串,就是由单引号或双引号括起来的Unicode字符序列。JS中没有char类型。我们要注意的是字符串常量中的转意序列。如:
[list]
[*]\xXX:由两位十六进制数值XX指定的Latin-1字符
[*][b]\uXXXX:由四位十六进制数值XX指定的Unicode字符[/b]
[*]\0:空字符串
[/list]
看一个例子:在前台表单验证的时候我们经常需要检测输入的字符串长度,防止输入的长度大于数据库可以存储的最大长度。但是由于字符编码问题,我们不能简单的使用字符串的length属性进行判断所占字符个数,而是要判断字节数。比如一个汉字占了一个字符长度,但是却占用了两个字节的空间大小。在此我们可以通过一个函数计算字符串所占的字节数:

function getBytes(str)
{
if(!str){return 0;}
var count = 0;
for (var i = 0; i < str.length; i++)
{
var c = str.charAt(i);
/^[\u0000-\u00ff]$/.test(c)?count++:count+=2;
}
return count;
}
alert(getBytes(''));//0
alert(getBytes('haha'));//4
alert(getBytes('haha中国'));//8


字符串的使用:
[list]
[*]length属性:字符个数
[*]charAt()方法:取当个字符操作
[*]substring(start,end)方法:取子字符串,包括start不包括end
[*]indexOf(arg):查找子字符串在原字符串中的位置,找不到返回-1
[*]charCodeAt(index):返回字符编码,为0到65535。如果index为负数或者大于字符串的 长度,返回NaN
[*]concat():连接,我们一般直接用“+”实现之
[*]lastIndexOf(str[,start]):
[*]match():用正则比大师执行模式匹配
[*]replace():用正则表达式执行查找、替换操作。
[*]search():检索字符串中与正则表达式匹配的字串
[*]slice():返回字符串的一个片段或一个字串
[*]split():
[*]toLowerCase():
[*]toUpperCase():
[/list]
部分例子:

var str="welldone";
alert(str.charAt(0));//w
alert(str.substring(0,4));//well
alert(str.indexOf('ell'));//1
alert(str[0]);//部分JS实现支持的读取单个字符的方法,尽量使用charAt


类型转换:数值转换为特定进制的字符串:
Number.toString(base)

var n=17;
alert(n.toString(2));//10001
alert(n.toString(8));//21
alert(n.toString(16));//11


字符串转换为数字:
var product = "21"*"2",JS会自动将两个字符串转换为数字,得到的结果为Number类型的42。[b]所以我们只要将一个数字字符串减去0就可以将其转换为一个数字:
var str="33"-0;[/b]
也可以通过parseInt和parseFloat进行转换,并忽略或舍去非数字部分。如果转换失败则返回NaN。另外,parseInt还可以指定所输入字符串表示的数字的进制,如:
parseInt("11",2)指明“11”是二进制表示下的“11”,所以转换为十进制的整数后得到3。
记住:parseInt(str,base)和number.toString(base)可以进行进制转换。

布尔类型:
JS中的布尔值很容易进行转换,如果一个布尔值用在数值环境中,true就转换为数字1,false则转换为0.如果用在字符串中,true转换为“true”,false转换为“false”。空值和未定义的值都转换为false【包括空字符】,任何的非空对象、数组或函数都可以转换为true。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值