zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    【原】用IDEA远程Debug Tomcat服务
    【原】getInputStream()与getParameterMap()获得Post请求的数据区别
    【原】使用Eclipse远程Debug测试环境
    【原】配置MySQL服务器端的字符集
    【原】Spring整合Redis(第三篇)—盘点SDR搭建中易出现的错误
    【原】Spring整合Redis(第二篇)—SDR环境搭建具体步骤
    【原】Spring整合Redis(第一篇)—SDR简述
    【转】InitializingBean的作用
    【原】Redis windows下的环境搭建
    【原】Maven解决jar冲突调试步骤:第三方组件引用不符合要求的javassit导致的相关异常
  • 原文地址:https://www.cnblogs.com/yhongyu/p/2455295.html
Copyright © 2011-2022 走看看