发表于: 2018-06-22 21:49:44

1 705


今天完成的事情:

   由于生病身体不适,没有进行工作。在晚上看一下javascript的数据类型。
明天计划的事情:

   学习javascript定时函数 
遇到的问题:暂无 
收获:

 ------------------------------------《Javascript高级程序设计》数据类型部分读书笔记

 ECMAScript 数据类型分为两大类:基本数据类型(5种)引用数据类型(也叫object,包括{function、array等})。

           ECMAScript不支持任何自定义类型的机制,而所有的值最终都将是上述类型之一。乍一看只有6种数据类型不足以表示所有数据,但是,由于ECMAScript 数据类型具有动态性,因此的确没有再定义其他数据类型的必要。

            鉴于ECMAScript 是松散类型的,因此需要有一种手段来检测给定变量的数据类型——typeof就是负责这方面信息的操作符。对一个值使用typeof操作符可能返回下列某个字符串:

           "undefined"——如果这个值未定义;

            "boolean"——如果这个值是布尔值;

            "string"——如果这个值是字符串;

             "number"——如果这个值是数值;

            "object"——如果这个值是对象或null;

            "function"——如果这个值是函数;

【一 】基本数据类型(5种)

  一.Undefined类型

1.1 Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined.

   var message;

   alert(message == undefined); //true

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

  var message;

  alert(message); //警告框显示"undefined"

  alert(age);//age没有声明,产生错误

1.3   然而,对未初始化的变量执行typeof操作符会返回undefined值对未声明的变量执行typeof操作符也会返回undefined值

 var  message;

alert(typeof message);//"undefined"

alert(typeof age);//"undefined"

二 Null类型

2.1  null Null类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度讲,null值表示一个空对象指针,这也是使用typeof操作符检测null值时会返回“object”的原因。

    var car = null;

  alert(typeof car); //"object"

2.2 如果定义的变量准备在将来用于保存对象,那么最好将变量初始化为null而不是其他。实际上,undefined值是派生自null值的,因此ECMA-62规定对他们的相等性测试要返回true.

   alert(null == undefined); //true

 尽管null和undefined有这样的关系,但他们的用途不一样。无论在什么情况下,都没有必要把一个变量的值显示的设置成undefined,可是同样的规则对于null却不适用。只要有意保存对象的变量还没有真正保存对象,就应该明确的让该变量保存null值。不仅体现null值作为空对象指针的惯例,而且也有助于进一步区分null和undefined。

三 Boolean类型

  3.1 Boolean类型只有两个字面值:true和false.这两个值与数字值不是一回事,因此true不一定等于1,false不一定等于0.

 需要注意的是,Boolean类型的字面值true.false是区分大小写的。也就是说,True和False(以及其他形式的混大小写形式)都不是Boolean值,只是标识符。

 3.2 虽然Boolean类型的字面值只有两个,但是ECMAScript中所有类型的值都有与这两个值等价的值。要将一个值转换为其相对应的Boolean值,可以调用转型函数Boolean(),如下例:

  var message = "hello world!“;

  var messageAsBoolean = Boolean(message);

  可以对任何类型的值调用Boolean()函数,而且总会返回一个Boolean值。转换规则如下:

  数据类型          转换为true的值          转换为false的值

 Boolean            true                  false

  String           任何非空字符串            “”(空字符串)

  Number          任何非零数字值(包括无穷大)    0和NaN

  Object           任何对象                 null

 Undefined          not applicable(不适应)     undefined

这些转换规则对理解流控制语句(如if语句)自动执行相应的Boolean转换非常重要,

var message = "hello world";

if(message){

  alert("value is true");

}

运行这个示例,就会显示一个警示框,因为字符串message被自动转换成了对应的Boolean值(true).由于存在这种自动执行的Boolean转换,因此确切的知道在流控制语句中使用的是什么变量至关重要。

四 Number类型

   4.1 为支持各种数值类型,ECMA-262定义了不同的数值字面量格式。

    最基本的数值字面量是十进制整数。

    var   intNum = 55;

  还有八进制整数。(严格模式下是无效的)八进制字面值的第一位必须是零(0),然后是八进制数字序列(0-7),如果字面值的数字超出范围,那么前零将被忽略,后面的数字将被当做十进制数值解析。

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

 var  octalNum2 = 079; //无效的八进制的——解析为79

   还有十六进制整数。十六进制字面值的前两位必须是(0x),然后是八进制数字序列(0-9及A-F或a-f).

  在进行算术计算时,所有以八进制和十六进制表示的数值最终将被当做十进制数值解析。

 4.2浮点数值

 数值中必须包含一个小数点,并且小数点后面必须至少有一位小数。

由于保存浮点数值需要的内存空间是保存整数值的两倍,因此如果小数点后面没有跟任何数字,如果浮点数值本身表示的就是一个整数,都会被转换为整数。

4.3NAN

NaN,是一个特殊的数值。用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。在ECMAScript中,任何数值除以非数值会返回NaN,因此不会影响其他代码的执行。

NaN有两个非同寻常的特点,首先,任何涉及NaN的操作都会返回NaN。其次,NaN与任何值都不相等,包括NaN本身。


五 String 类型

string类型即字符串,可以由双引号或单引号表示。

5.1字符字面量

字面量                                  含义

\n                                    换行

\t                                    制表

\b                                     退格

\r                                    回车

\f                                    禁止

\\                                     斜杠

\'                            单引号,在用单引号表示的字符串中表示

\"                            双引号,在用双引号表示的字符串中表示

\xnn                以十六进制代码nn表示的一个字符(n为0-F),例如\x41表示“A”

\unnnn               以十六进制代码nnnn表示的一个Unicode代码(n为0-F)

【二】引用数据类型

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

   var  o = new Object();

   Object类型是所有它的实例的基础,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。

Object的每个实例都具有一些属性和方法。

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

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

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

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

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

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

    valueOf():返回对象的字符串、数字或布尔值表示。

    从技术角度讲,ECMA-62中对象的行为不一定适用Javascript中的其他对象,浏览器环境中的对象,比如BOM和DOM中的对象,都属于宿主对象,因为他们是由宿主实现提供和定义的。ECMA-62不负责定义宿主对象,因此宿主对象可能会也可能不会继承object.






返回列表 返回列表
评论

    分享到