JavaScript高级程序设计学习笔记(三)

3.4、数据类型:

五种简单的数据类型,Undefined,Null,Boolean,Number,String。

一种复杂的数据类型:Object(Object本质是由一组无序的名值对组成)。

ECMAScript不支持自己创建的类型,所有值最终都是上面6种之一

3.4.1、typeof:可返回的值:undefined,boolean,string,number,object,function(函数不是数据类型,但是有一些特殊属性,所以由于必要区分),(不含Null的数据类型)

     alert(typeof message)和alert(typeof (message))都是一样的,但是typeof不是函数,这一点要注意。alert(typeof 100);这也是可以的。

3.4.2、Undefined:只有一个值,undefined。

var message;

alert(message==undefined);//true

等价于

var message=undefined;

alert(message==undefined);//true,不过没这个必要~

包含undefined值的变量与尚未定义的变量还是不一样的,

var message;

alert(message);//“undefined”

alert(age);//产生错误

对于未声明的变量,只能使用typeof检测其数据类型,但是检测是会出现与为初始化相同的状况。

var message;

alert(typeof message);//“undefined”

alert(typeof age);//“undefined”

最好能在声明时就赋值,这样便于区分是否未声明。

3.4.3、Null:就只有null值。

从逻辑上讲null值表示空对象指针,这也是检测时出现object的原因,

var car=null;

alter(typeof car);//"object"

如果定义的变量准备保存对象,那么最好将该变量初始化为null而不是其他值,这样就只要检查null就可以知道相应变量是否已经保存对象的引用了。

如:if(car!=null){

//对car对象执行某些操作

}

实际上undefined值是派生自null值的因此ECMA-262规定对它们的相等性测试返回值是true。

alter(undefined==null);//true

不过出于比较的目的会转换其操作数。

null和undefined有这样的关系,但用途和用法完全不同,所以需要区分~

3.4.4、Boolean:true和false(注意true不一定等于1,false也不一定等于0,还有注意true和false是区分大小写的,True和False都不是Boolean的值

虽然Boolean值只有两个,但是所有类型都有与其对应的值,只要调用Boolean(),就可以转换。

转换为true:string 任何非空字符串;Number 任何非零数字(包括无穷大);Object任何对象;Undefined n/a(或N/A,not applicable 的缩写,意思是不适用);

转换为false:string “”(空字符串);Number 0和NaN;Object null;Undefined undefined;

在控制流语句中,这些转换是自动执行的。

var message=“hi”;

if(message){alter(“123”);}

运行会有一个警告框,因为自动转换了string为Boolean。

3.4.5、Number

最常见的是十进制的得数。

八进制:前面带零,后面只要每位不超过8,就是有效的,若有任何一位超过8,解析为对应的十进制,前导零去掉。

           var octalNum=070;//八进制的56

           var octalNum=079;//无效八进制数值—解析为79

           var octalNum=08;//无效八进制数值—解析为8,

十六进制:前两位是0x,后面可以是0~9,a-f或A-F大小写都行。

           var hexNum=0xA;//十六进制的10

           var hexNum=0x1f;//十六进制的31

虽然可以进行表示,但在进行算数计算时,最终都是转换成十进制数值的。

1、浮点数值:

var floatNum=1.1;

var floatNum=0.1;

var floatNum=.1;//有效,但是不推荐

var floatNum=1.;//自动转换成整型1

var floatNum=10.0;//自动转换成整型10

var floatNum=3.125e7//表示31250000,(大写的E也行)

var floatNum=3e-7//表示0.0000003

默认情况下,小数点后带6个零以上就会自动转换成带e的科学计数发。

var floatNum=0.0000003//系统转换为3e-7

还有不要进行特定浮点数的数值比较:例如0.1+0.2=0.30000000000000004,由于采用IEEE754数值的浮点计算通病,最高精确到17位小数。

2、数值范围

ECMAScript中保存的最小数Number.MIN_VALUE中的,一般是5e-324,超过的话就是-Infinity(负无穷)

最大值Number.MAX_VALUE中的1.7976931348623157e+308,超过的话就是Infinity(正无穷)

超过之后就无法参加下一步计算~

可用isFinite()来检测是否超出范围,未超出就会返回true

Number.NEGATIVE_INFINITY和Nuber.POSITIVE_INFINITY中保存着-Infinity和Infinity。

3、NaN(即非数值,Not Number,是特殊的数值)用来表示一个要返回数值的操作,但是没有返回数值,这样就不会抛出异常了。

在其他语言中/0会报错,但是ECMAScript中/0返回NaN

两个特点:

任何包含NaN的数值都返回NaN

NaN与任何止步相等,包括其本身。alert(NaN==NaN);//false

针对这两个特点,用isNaN()测试,如果可以转换成数值就返回false,不能就返回true

alter(isNaN(NaN));//true

alter(isNaN(10));//false

alter(isNaN("10"));//false

alter(isNaN("blue"));//true

alter(isNaN(true));//false,转换成1

4、数值转换:Number(),parseInt(),parseFloat()

Number():

Boolean,true和false转换成1和0;

数字,简单的传入传出;

null,返回0;

undefined,NaN;

字符串,

只包含数字,直接转换成十进制数(前导零忽略)

包含有效浮点格式的,转换成对应的浮点格式(前导零忽略)

如果是十六进制的转换成相应的十进制数

空的(不包含任何字符),将其转换成0

除上述格式之外的,转换成NaN

如果是对象,则先调用对象的valueOf()方法,然后依照前面的值转换返回的值。如果返回的是NaN,则调用对象的toString()方法然后一次调用前面的。

var num=Number("Hello world!");//NaN

var num=Number("");//0

var num=Number("000011");//11

var num=Number(true);//1

parseInt()会忽略字符串前面的空格,知道找到第一个非空格字符,

如果第一个字符不是数字字符或者负号,返回NaN;

符合就会继续解析下一个字符,知道不是为止,包括小数点;

如果字符串中第一个是0,就是八进制,0x就是16进制,

var num=parseInt("1234blue");//1234

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

var num=parseInt("0xA");//10(十六进制)

var num=parseInt(22.5);//22

var num=parseInt("070");//56(八进制),注意与Number()不同,Number()是

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

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

parseInt()可以有第二个参数,用来规定基数的进制,以免出现0导致解析错误的情况。

parseFloat()会转换解析到的参数,直到遇到无效字符(只解析十进制)。

var num=parseFloat("1234blue");//1234(整数)

var num=parseFloat("0xA");//0

var num=parseFloat("22.5");//22.5

var num=parseFloat("22.34.5");//22.34

var num=parseFloat("0908.5");//908.5

var num=parseFloat("3.125e7");//31250000

3.4.6、String类型

 在ECMAScript中"和‘的用法相同

1、字符字面量:\转义字符

\n 换行,\t 制表,\b 空格,\r 回车,\f 进纸 ,\\ 斜杠,\' 单引号,

\" 双引号\xnn 以十六进制表示的一个字符(n为0-f),例如\x41表示'A',

\unnnn 以十六进制表示Unicode字符,例如\u03a3表示希腊字母西格玛,

任何字符串都有.length属性

2、字符串特点:字符串一旦创建值就不能改变。

例如:var lang=“Java”;

      lang=lang+“Script”;

首先创建一个能容纳10个字符串的新字符串,然后用Java和Script填充,最后是销毁原来的字符串Java和Script。

3、转换为字符串

数值,布尔值,对象,字符串值都有toString()方法,(字符串本身调用就是返回一个字符串的副本),null和undefined没有该方法。

一般调用无需参数,数值调用时可转换成其他进制的,

String()方法,如果有toString(),调用该方法;如果没有,null返回null,undefined返回undefined。

var a=10;

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

alert(String(a));//调用方法不一样

3.4.7、Object

创建一个Object实例可以使用

var o=new Object();

var o=new Object;//如果不带参数,也可以这么做。但是不推荐。

Object具有的属性和方法。

constructor--保存着用于创建当前对象的函数,对于前面而言,就是Object();

hasOwnPropertyName(propertyName)--用于检查给定的属性在当前的实力对象中是否存在(不是实例的原型中),propertyName必须以字符串形式传入。例如o.hasOwnPropertyName(“name”)

isPrototypeOf(object)--用于检查传入的对象是否是另一个对象的原型

propertyIsEnumerable(propertyName)--用来检查给定的属性是否能够用for-in语句来枚举,

toString()--返回对象的字符串表示、

valueOf()--返回对象的字符串、数值、或布尔值表示。通常与toString()方法返回的一样。

由于Object是最基本的类,所以所有对象都有这些属性和方法。

欢迎大家访问yhy的新博客:一块吧 (www.yikuai8.com)
原文地址:https://www.cnblogs.com/yhongyu/p/2455295.html