JavaScript基本概念(二)

数据类型
JavaScriptzz有五种基本数据类型:Undefined、Null、Boolean、Number和String;还有一种复杂数据结构Object。

1.typeof操作符
该操作符用来检测给定变量的数据类型,对不同的值typeof操作符可能返回不同的字符串。
(1) “Undefined” 该值未定义
(2) “boolean” 该值是布尔值
(3) “string” 该值是字符串
(4) “number” 该值是数值
(5) “object” 该值是对象或者null
(6) “function” 该值是函数

<script>
        var a1=10; //number
        var a2="Hello"; //string
        var a3; //Undefined
        var a4=null; //object
        var a5=true; //boolean
        var a6=function() //function
        {
            alert("Test");
        };
        alert(typeof a1);
        alert(typeof(a2));
        alert(typeof(a3));
        alert(typeof(a4));
        alert(typeof(a5));
        alert(typeof(a6));
    </script>

2.Undefined类型
使用var声明变量时候,未对其初始化时,这个变量的值就是undefined。我们也可以使用undefined显示初始化变量,但是未经初始化的值就会取到undefined,所以没有必要。需要注意的是包含undefined值的变量和未定义的变量是不一样的。例如:

var a1;
alert(a1);
alert(a2);

变量a2未定义,这样会导致一个错误。但是对未定义的变量使用typeof操作符也会返回undefined值,例如:

var age;
alert(typeof age); //undefined
alert(typeof height); //undefined

这个结果又逻辑上的合理性,虽然从技术角度讲两者有本质区别,但实际上两者都不能执行真正的操作。

3.Null类型
该类型只有一个特殊的值:null。ongoing逻辑角度讲,null是一个空对象指针,这也是为何使用typeof操作符检测null值返回的是”object”。例如:

var car=null;
alert(typeof car); //object

如果定义变量准备在之后保存对象,那么最好将此变量初始化为null,而不是其他值。例如:

var car=null;
if(car==null)
{
   //执行操作
   alert("变量car为空");
}

实际上,undefined值派生自null值,这两个值进行相等性测试时候返回true。

alert(undefined==null); //true

4.Boolean类型
该类型有两个值:true和false。这两个值不同于数字值,true不一定为1,false不一定为0。由于区分大小写,True和False均不是Boolean值,而是两个标识符。需要注意的是,JavaScript中所有类型的值都有与这两个Boolean值等价的值。我们只需要使用转型函数Boolean(),即可将一个值转换为其对应的Boolean值。

var message="Hello Java";
var messageBoolean=Boolean(message); //true
alert(messageBoolean);

5.Number类型
Number类型可以说是最令人关注的数据类型了。数字字面量格式有最常见的十进制,还有八进制和十六进制。需要注意的是,在严格模式下,使用八进制字面量是无效的,会抛出一个错误。使用如下:

var a1=100;
var a2=0144;
var a3=0x64;
alert(a1); //100
alert(a2); //100
alert(a3); //100

(1) 浮点数
小数点后面必须有一位数字,前面可以没有数字,但是并不推荐这种做法。例如:

var a1=.1;
var a2=1.5;
var a3=0.5;
alert(a1);  //0.1
alert(a2);  //1.5
alert(a3);  //0.5

由于保存浮点数需要的空间是整数的两倍,所以如果小数点后面没有数字,或者是浮点数本身就是一个整数,那么在JavaScript中将它们装换为整数值。例如:

var a1=1.;
var a2=10.0;
alert(a1); //1
alert(a2);  //10

对于那些极大和极小的数值,可以使用e表示法(科学计数法)表示的浮点数来表示。例如:

var bigData=1.24e10;
var smallData=4.56e-10;
alert(bigData); //12400000000
alert(smallData); //4.56e-10 只要小数点后面出现6个零以上就这样表示

需要注意的是,虽然浮点数的最高精度是17位小数,但在进行算术计算时,它精确度却远远不如整数。例如,0.1加0.2不等于0.3,而是等于0.30000000000000004。这个小小的误差将会导致无法测试特定的浮点数值。但是如果我们将测试的数值换为0.15和0.15,就不会出现问题。例如:

var a1=0.1;
var a2=0.2;
var a3=0.15;
if(a1+a2==0.3)
{
   alert("正好0.3");
}else{
   alert("并不等于0.3");
}
if(a3+a3==0.3)
{
   alert("等于0.3");
}else{
   alert("不等于0.3");
}

(2)数值范围
由于内存的限制,在JavaScript表示的数是有范围的,最大的数为Number.MAX_VALUE,最小的数为Number.MIN_VALUE。如果超过这个范围,那么数值将被转换为Infinity,如果值为正,则为+Infinity,为负则为-Infinity。如果值为Infinity,那么将无法参与到下一次的运算。在JavaScript中,我们可以使用isFinite()方法来判断一个数是否有穷。

var num=Number.MAX_VALUE+Number.MAX_VALUE;
alert(isFinite(num)); //false 说明是无穷

(3)NaN
NaN,非数值是一个特殊的数值,这个数值表示一个本来要返回数值的操作数未返回值的情况,这样就不会抛出错误。在JavaScript中,任何数除以0都会返回NaN,因为不会影响代码的运行。需要注意的是,NaN本身就有两个不同寻常的特点:1.任何涉及NaN的操作都会返回NaN 2.NaN与任何值都不相等,包括本身NaN。针对这两个特点,JavaScript中有isNaN()函数,它的作用是帮我们判断参数是不是数值。那么不能被转换为数值的参数,在使用isNaN()函数后会返回true;而那些可以被转换为数值的参数,则返回false。实例如下:

alert(isNaN(NaN)); //true
alert(isNaN("10")); //false 可以转换成数值
alert(isNaN(10)); //false 本身就是一个数值
alert(isNaN("blue")); //true
alert(isNaN(true)); //false 可以转换成数值1

(4)数值转换
有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()。第一个函数适用于任何数据类型,第二个和第三个函数适用于字符串类型。
Number()函数的转换规则如下:
1. 如果是Boolean,true和false分别被转换为true和false.
2. 如果是数字值,那么只是简单传入和返回
3. 如果是null值,则返回0
4. 如果是undefined,返回NaN
5. 如果是字符串,则需要遵循下列规则:
1) 如果字符串中只含有数字,则将其转换为十进制数值,非0数字前的所有0将被会略。
2) 如果字符串中含有有效的十六进制格式,则将其转换为对应的十进制数。
3) 如果字符串为空,则转换为0
4) 如果字符串中包含除了以上几种的内容,那么其将被转换为NaN
6. 如果是对象,首先调用对象的valueof()方法,然后按照之前的规则转换返回值。如果返回的是NaN,则调用对象的toString()方法,然后再次按照之前的规则转换返回值。

var num1=Number("Hello World!"); //NaN
var num2=Number(null); //0
var num3=Number(undefined); //NaN
var num4=Number("00124"); //124
var num5=Number(""); //0
var num6=Number("0x123"); //291
var num7=Number(true); //1

在解析整数的时候,更多的是使用parseInt()函数。它可以解析各种整数进制的数,忽略字符串第一个非空格字符前的所有空格,如果第一个非空格字符不是数字,那么返回NaN;如果第一个非空格字符是数字,那么继续往下看,直到再次找到一个空格为止。在ECMAScript3和5中,对八进制的解析是不同的,例如:parseInt(“070”)在3中为56,在5中为0。为了解决这个问题,我们在使用parseInt()方法时候,可以为其提供第二个参数:转换进制。当操作数相同,进制不同,带来的结果自然也就不同。例子 如下:

var num1=parseInt("");
var num2=parseInt("22");
var num3=parseInt(22);
var num4=parseInt(22.5);
var num5=parseInt("22.5");
var num6=parseInt("1234blue");
var num7=parseInt("blue1234");
var num8=parseInt("0x22");
var num9=parseInt("070"); //3中为56 5中为0

var a=parseInt("070",8);
var b=parseInt("070",16);
var c=parseInt("0xAF",16);
var d=parseInt("AF",16);

var t1=parseInt(10,2);
var t2=parseInt(10,10);
var t3=parseInt(10,8);
var t4=parseInt(10,16);

parseFloat()与parseInt()相似,但是它解析到的 第一个小数点是有效的,第一个非零数前的所有零会被忽略,它可以识别所有浮点数值格式和十进制字符串,碰到十六进制格式的字符串都会返回0。它无法指定转换进制,如果字符串包含的是一个整数,它将返回整数。

var num1=parseFloat("12.34.56"); //12.34
var num2=parseFloat("0x123456"); //0
var num3=parseFloat("20"); //20
var num4=parseFloat(20); //20
var num5=parseFloat("020"); //20
var num6=parseFloat("0908.7"); //908.7
var num7=parseFloat("1234blue"); //1234
var num8=parseFloat("3.125e7"); //31250000

String类型
String类型是由零个或者多个Unicode字符组成的字符序列,即字符串。字符串可以由单引号或者双引号表示,例如:

var  str1="hello"; //有效
var str2='hello'; //有效

在ECMAScript中,这两种方式没有什么不一样,但需要注意的是,以单引号开头必须以单引号结尾,以双引号开头的必须以双引号结尾。

1.字符字面值
String数据类型中包含一些特殊含义的字符字面值(转义序列),用于表示非打印字符,或者是具有其他功能的字符。它们可以出现在字符串的任意位置,例如:

var str="This is a letter sign:\u03a3.";
alert(str.length); //输出

长度返回的是字符串中16位字符的个数,如果字符串中包含双字节字符,那么length属性将不能准确返回字符串中字符个数。

2.字符串的特点
ECMAScript中的字符串是不可变的。如果想要改变一个字符串,首先需要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量,例如:

var str="hello";
str+=",world!";

3.转换为字符串
要把一个周转换为字符串有两种方式。第一种就是使用几乎每个值都有的toString()方法,这个方法返回相应值的字符串表现。需要注意的是,null或者undefined值没有toString()这个方法。大多数情况,toString是不需要传入参数的;但是toString()方法可以传入一个参数,该参数表示数值的基数,默认情况下toString()方法以十进制返回数值的字符串表现,通过传递该参数可以输出以二进制、八进制、十六进制甚至是任意有效进制格式表示的字符串值。例如:

var num=10;
alert(num.toString()); //"10"
alert(num.toString(2)); //"1010"
alert(num.toString(8)); //"012"
alert(num.toString(16)); //"a"
alert(num.toString(4)); //"22"

如果不知道转换的值是不是null值或者是undefined的话,可以使用String()转型函数,它能够将任何类型的值转换为字符串。在转化的时候,我们需要遵循如下规则:
1) 如果值有toString()方法,则调用该方法并返回对应的字符串值。
2) 如果是null,则返回”null”。
3) 如果是undefined,则返回”undefined”。

var ex1=10;
var ex2=null;
var ex3=true;
var ex4;
alert(ex1); //"10"
alert(ex2); //"null"
alert(ex3);  //"true"
alert(ex4);  //"undefined"

7.Object类型
ECMAScript中的 对象是一组数据和功能的集合。对象可以通过new操作符后跟要创建的对象类型的名称来创建。创建Object类型的实例 并为其添加属性和方法,就可以创建自定义对象。例如:

var a=new object();

object的每个实例都具有下列属性和方法。
1) Constructor:保存着用于创建当前对象的函数。指的是构造器。
2) hasOwnPropertyName:用于检测给定的属性是否在当前对象实例中,给定的参数必须是以字符串的形式。
3) isPrototypeof(object):用于检测传入的对象是否是另一个对象的原型。
4) propertyIsEnumerable(propertyName):用于检测给定的属性能否使用for-in语句来枚举。
5) toLocaleString():返回对象的字符串表示与执=执行环境地区有关。
6) toString():返回对象的字符串表示。
7) valueOf():返回对象的字符串、数值或者布尔值表示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值