javascript学习日记——(2)

3.13    Number类型
Number类型应该是ECMAScript中最令人关注的数据类型了,它有整数和浮点数值。
最基本的数值字面量格式是十进制证书,如   var intNum=55;
除了以十进制表示外,证书还可以通过八进制或十六进制的字面值来表示。其中,八进制的第一位必须是零,然后是八进制数字序列(0~7),如果数值超出了范围,那么前导零将被忽略,后面的数值将被当作十进制数值解析。
如:   var octalNum1=079;           //无效的八进制解析为79
          var  octalNum2=070;          //八进制的56
          var  octalNum3=08;            //无效的八进制解析为8


注意:八进制在严格模式下是无效的。
十六进制的前两位必须是0x,后跟任何十六进制数字(0~9及A~F),其中A~F可以大写,也可以小写。
如:    var  hexNum1=0xA;         //十六进制的10
           var  hexNum2=0xlf;         //十六进制的31
在进行算术计算时,所有以八进制和十六进制表示的数值都将被转换为十进制数值。
3.13.1    浮点数值
所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后必须至少有一位数字。
如: var floatNum1=1.2;
var floatNum2=0.2;
var floatNum3=.2;               //有效,但是不推荐
因为保存浮点数值需要的内存是保存整数的两倍,所以ECMAScript会不失时机地将浮点数值转换为整数值。
如: var floatNum1=1.;          //小数点后没有数字会转换成1
var floatNum2=1.0;      //解析为1
极大或者极小的值可以用e表示法表示
如: var floatNum=3.123e7;        //解析为31230000   e7就是10的指数次幂
               var floatNum2=3e-7;             //解析为0.0000003
小数点后带有6个零以上的浮点数值转换为e表示法表示
注意:0.1+0.2!=0.3    而是0.30000000000000004         //舍入误差   所以永远不要测试某个特定的浮点数值
3.13.2    数值范围
由于内存的限制,ECMAScript并不能保存世界上所有的数值。最小的数值保存在 Number.MIN_VALUE 中——在大多数浏览器中,这个值是5e-324;最大的数值保存在 Number.MAX_VALUE 中——在大多数浏览器中,这个值是1.7976931348623157e+308。如果计算结果超出数值范围,这个数值将会自动转换为特殊的 Infinity值。如果是负数,会转换成—Infinity(负无穷)。正数转换成Infinity(正无穷)。
如果某次计算返回了正或者负的Infinity值,那么该值将无法继续参与下一次的计算,因为Infinity不是能够参与计算的数值。如果想确定一个数值是不是位于最大数值和最小数值直接,可以使用isFinite()函数。 如果参数位于最大和最小数值之间会返回true。
如 var result=Number.MAX_VALUE+Number.MAX_VALUE;
alert(isFinite(result));   //false
3.13.3    NaN
NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。NaN有两个特点。首先,任何涉及NaN的操作(如NaN/10)都会返回NaN,其次,NaN与任何值都不相等,包括NaN本身。
如: alert(NaN == NaN)       //false
针对这两个特点,ECMAScript定义了 isNaN()函数,这个函数会帮我们确定这个参数是否“不是数值”。isNaN()在接收到一个值之后,会常识将这个值转换为数值。不能转换为数值的值会返回true。
如: alert(isNaN(NaN)); //true
alert(isNaN(6));        //false
alert(isNaN("6")); //false     可以转换为6
alert(isNaN("blue")); //true      不能转换为数值
alert(isNaN(true)); //false      可以转换成数值1
3.13.4 数值转换
有3个函数可以把非数值转换为数值:Number() 、parseInt() 和 parseFloat()
Number()函数: 如果是Boolean值,true和false将分别被转换为1和0。
如果是数字,就传入和返回。
如果是null值,返回0。
如果是 undefined,返回NaN。
如果是字符串,则:
如果字符串只包含数字,则将其转换为十进制数值,即"1"会变成1,"123"会变成123,"011"会变成11(前面的零被忽略)
如果字符串包含有效的浮点数值,如:"1.1"则变成1.1,同样前面的零会被忽略
如果字符串包含有效的十六进制格式,例如:"0xf",则将其转换为相同大小的十进制数值
如果字符串是空的,则将其转换为0
如果字符串不包含上述格式的字符,则将其转换为NaN
如果是对象,则调用对象的valueOf()方法,然后按照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后按照前面的规则
转换返回的值。
如: var num1=Number(true);    //1 false对应0
var num2=Number(3);   //3
var num3=Number();  //0
var s;
var num4=Number(s);  //NaN
var num5=Number("1.2")  //1.2
var num6=Number("")  //0

var num7=Number("hello") //NaN


由于Number()函数在转换字符串时比较复杂而且不够合理,因此在处理整数的时候更常用的是parseInt()函数。

parseInt()函数户忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN;也就是说,用parseInt()转换空字符串会返回NaN(Number()对应空字符返回0)。如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。

如: var num1=parseInt("1234blue");   //1234

var num2=parseInt("");                  //NaN

var num3=parseInt("1.1");             //1    parseInt()是整数转换

var num4=parseInt("070");            //56(八进制数)

var num5=parseInt("70");      //70(十进制数)

var num6=parseInt("0xf");      //15(十六进制数)

parseInt()在解析像八进制字面量的字符串时,ECMAScript 3 和 5存在分歧。因为在 5中 parseInt()已经不具有解析八进制值的能力了,因此前导的零会被认为无效。

为了消除在使用parseInt()函数时候可能产生的疑惑,可以为这个函数提供第二个参数。

如: var num1=parseInt("0xAF" , 16);         //175       按照十六进制数计算

指定了第二个参数之后,字符串可以不带前面的"0x"

var num1=parseInt("AF" , 16);//175   按照十六进制数计算

var num2=parseInt("AF");//NaN      

parseFloat()函数和parseInt()函数类似,不一样的是parseFloat()函数可以转换浮点数值,还有parseFloat()只解析十进制值。

如: var num1=parseInt("1234blue");   //1234

var num2=parseInt("1.1");             //1.1

var num3=parseInt("0xf");//0 不识别十六进制但是会解析出0

var num5=parseInt("1.1.1");   //1.1

var num6=parseInt("01.1");   //1.1

var num7=parseInt("3.125e7");   //31250000

3.14    String 类型

string就是字符串,字符串可以由双引号或者单引号表示。

var firstName="li";

var lastName='lei';         //都有效

3.14.1    字符字面量

string数据类型包含一些特殊的字符字面量。

字面量                           含义

\n                                   换行

\t                                     制表

\b 退格

\r 回车

\f 进纸

\\ 斜杠

\' 单引号,在用单引号表示的字符串中使用。如:' He said , \'hey\'  '

\" 双引号,在用双引号表示的字符串中使用。如:" He said , \"hey\'" '

\xnn 以十六进制代码nn表示的一个字符(其中n为0~F)。如:\x41 表示"A"

\unnnn 以十六进制代码nnnn表示的一个Unicode字符(其中n为0~F)。如: \u03a3 表示希腊字符 Σ(求和)

3.14.2    字符串的特点

ECMAScript中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后在用另一个包含新值的字符串填充该变量。

如: var lang="java";

lang=lang+"script";

3.14.3 转换为字符串

var age=11;

var ageAsString=age.toString();               //字符串"11"

var found=true;

var foundAsString=found.toString();         //字符串"true"

数值、布尔值、对象和字符串都有toString()方法。但null和undefined值没有。

多数情况下toString()不需要传递参数,但在调用数值的tostring()方法时,可以传递一个参数:输出数值的基数。

如: var num=10;

alert(num.toString());//"10"

alert(num.toString(2));//"1010"

alert(num.toString(8));//"12"

alert(num.toString(10));//"10"

alert(num.toString(16));//"a"

在不知道要转换的值是不是null或者undefined的情况下,还可以使用转型函数String(),这个函数能够将任何类型的值转换为字符串。String()函数遵循下列转换规则:

1、如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果;

2、如果值是null,则返回null;

3、如果值是undefined,则返回undefined;

var value1=10;

var value2=true;

var value3=null;

var value4;

alert(String(value1)); //"10"

alert(String(value2)); //"true"

alert(String(value3)); //"null"

alert(String(value4)); //"undefined"

3.15    Object 类型

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

如: var o=new Object();

Object的每个实例都具有下列属性和方法。

constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)就是Object()。

hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(如:o.hasOwnProperty("name"))。

isPrototypeOf(object):用于检查传入的对象是否是当前对象的原型。

propertyIsEnumerable(prototypeName):用于检查给定的属性是否能够使用for-in语句来枚举。和hasOwnProperty()方法一样,作为参数的属性名必须以字符

串形式指定。

toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。

toString():返回对象的字符串表示。

valueOf():返回对象的字符串、数值、布尔值表示。通常与toString() 方法的返回值相同。

3.16    一元操作符

只能操作一个值的操作符叫做一元操作符。

3.16.1 递减和递增操作符

var age=29;

++age;   //30    与age=age+1 相等

--age;    //28

var num1=2;

var num2=22;

var num3=--num1+num2;     //等于23  num1-1然后和num2相加

var num4=num1+num2;        //等于23  num1的值引用上面的num1所以结果和num3相同

上面的是前置性递增和递减操作符

var age=29;

age++;   //30

前置和后置有一个非常重要的区别,即递增和递减操作是在包含它们的语句被求值之后才执行。

var num1=2;

var num2=22;

var num3=num1--+num2;     //等于24  num然后和num2相加

var num4=num1+num2;       //等于23  num3时用了num1的原始值完成了加法运算,而num4用了递减后的值。

这4个操作符对任何值都适用,他们不仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象。在应用于不同的值时,遵循下列规则。

在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1 的操作。字符串变量变成数值变量。

在应用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN。字符串变量变成数值变量。

在应用于布尔值false时,先将其转换为0再执行加减1的操作。布尔值变量变成数值变量。

在应用于布尔值true时,先将其转换为1再执行加减1的操作。布尔值变量变成数值变量。

在应用于浮点数值时,执行加减1的操作。

在应用于对象时,先调用对象的valueOf()方法以取得一个可供操作的值。然后对该值应用前述规则。如果结果是NaN,则在调用toString()方法后再应用前述规则。对象变量变成数值变量。

var s1="2";

var s2="z";

var f=false;

var t=true;

var fd="1.1";

var o={

valueOf:function(){

return -1;

}

}

alert(s1++); //值3

alert(s2++); //值NaN

alert(f--); //值-1

alert(t++); //值2

alert(fd--); //值变成0.10000000000000009(由于浮点舍入错误所致)

alert(0++); //值为0

3.16.2 一元加和减操作符

绝大多数开发人员对一元加和减操作符都不会陌生,而且这两个ECMAScript操作符的作用与数学书上讲的完全一样。一元操作符以一个加号(+)表示,放在数值前面,对数值不会产生任何影响。

如:var num=25;

num=+num;         //25

不过对于非数值应用一元操作符时,该操作符会像Number()转型函数一样对这个值执行转换。

var s1="025";

var s2="hello";

var s3="1.1";

var s4="false";

var s5={

valueOf:function(){

return -1;

}

};

alert(+s1); //25

alert(+s2); //NaN

alert(+s3); //1.1

alert(+s4); //0

alert(+s5); //-1

一元减操作符主要用于表示负数,如将1转换成-1。

var num=25;

num=-num;     //-25

而应用非数值时,该操作符会像Number()转型函数一样对这个值执行转换。最后得到的数值再转换成负数。

var s1="025";

var s2="hello";

var s3="1.1";

var s4="false";

var s5={

valueOf:function(){

return -1;

}

};

alert(-s1); //-25

alert(-s2); //NaN

alert(-s3); //-1.1

alert(-s4); //0

alert(-s5); //1

一元操作符主要应用于基本的算术运算,也可以像前面示例所展示的一样用于转换数据类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值