《高级程序设计》3.4 数据类型

  • Undefined
  • Null
  • Boolean
  • Number
  • String

javascript有5种简单数据类型(也称基本数据类型)UndefinedNullBooleanNumberString

typeof操作符可以检测给定变量的数据类型:

var message="some thing";
alert(typeof message);  //"string"
alert(typeof 95);  //"number"

1)Undefined类型

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

对于尚未声明的变量,只能执行一项操作,即typeof检测其数据类型。

so,即便未初始化的变量会自动被赋予undefined值,但显示地初始化变量依然是明智的选择。如果能做到这一点,那么当typeof操作符返回“undefined”值时,我们就知道被检测的变量还没有被声明,而不是尚未初始化。

var message;
alert(message==undefined); //true
alert(age);    //会报错!!!
alert(typeof  message);  //undefined
alert(typeof age);  //undefined

2)Null类型

Null类型也是只有一个值,即null。表示一个空对象指针,所以typeof一个为null值的变量返回的是“object”

alert(null==undefined); //true

如 果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确 地让该变量保存null值。这样做不仅可以体现null作为空对象指针的惯例,而且也有助于进一步区分null和undefined。

3)Boolean类型

Boolean类型只有两个字面值:true和false。如果要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()

数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符 “”(空字符串)
Number 任何非零数字值(包括无穷大) 0和NaN
Objec 任何对象 bull
Undefined 不适用 undefined

4)Number类型

①浮点数值

对于极大或极小的数值,可以用e表示法(即科学计算法)。

浮点数值计算会产生舍入误差问题:浮点数值的最高精度是17位,但在进行算术计算时,其精确度远远不如整数。例如:0.1+0.2的结果不是0.3,而是0.30000000000000004。

so,永远不要测试某个特定的浮点数值

var a=0.1,b=0.2,c=0.15,d=0.15;
alert(a+b);  //0.30000000000000004
alert(c+d); //0.3

②数值范围

javascript能够表示的最小数值保存在Number.MIN_VALUE中,这个值是5e-324;

最大数值保存在Number.MAX_VALUE中,这个值是1.7976931348623157e+308;

在javascript计算中如果得到一个超出javascript数值范围的值,那么这个数值将被自动转换成特殊的Infinity值,即如果这个数值是负数,则被转换为-Infinity(负无穷),如果为正数,则是Infinity(正无穷)

③NaN

即非数值(Not a Number)是一个特殊的数值,这个数值用于表示本来要返回数值的操作数未返回数值的情况。例如:在其他编程语言中,任何数值除以0都会导致错误,从而停止代码执行。但在javascript中返回NaN,因此不会影响其他代码的执行。

NaN与任何值都不相等,包括NaN本身。任何涉及NaN的操作(NaN/10)都会返回NaN。

isNaN()函数,确定这个参数是否“不是数值”

    alert(isNaN(NaN));     //true;
    alert(isNaN(10));      //false
    alert(isNaN("10"));    //false
    alert(isNaN("blue"));  //true
    alert(isNaN(true));    //false

④数值转换

有3个函数可以把非数值转换为数值:Number(),parseInt()和parseFloat();

Number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换成数值。

Number()函数的转换规则:

  • 如果是Boolean值,true和false将分别被转换为1和0;
  • 如果是数字值,只是简单的传入和返回;
  • 如果是null值,返回0;
  • 如果是undefined值,返回NaN;
  • 如果是字符串,遵循下列规则:
    1. 如果字符串中只包含数字(包括前面带加号或逗号),将其转换为十进制。即“123”转换为123。“011”转换为11(忽略前导0);
    2. 如果字符串中包含有效的浮点格式,如“1.1”将其转换为对应的浮点数值(同样忽略前导0);
    3. 如果字符串中包含有效的十六进制,则将其转换为十六进制;
    4. 如果字符串是空的,不包含任何字符,则将其转换为0;
    5. 如果字符串中包含除上述以外的字符,则将其转换为NaN;
  • 如果是对象,则调用valueof()方法,然后依照前面的规则转换返回值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。
var num1=Number("Hello world!");  //NaN
var num2=Number("");              //0
var num3=Number("000011");        //11
var num4=Number(true);            //1

在处理整数的时候,更常用的是parseInt()函数。

parseInt()函数转换规则:

  • 如果第一个字符不是数字或者负号,返回NaN。
  • 如果第一个字符是数字,会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。例如“1234blue”会被转换为1234;
  • 如果字符串中的第一个字符是数字字符,parseInt()也能够识别出各种整数格式(八进制,十进制和十六进制)。
var num1 = parseInt("1234blue"); //1234
var num2 = parseInt("");   //NaN
var num3 = parseInt("0xA");  //10
var num4 = parseInt(22.5); //22
var num5 = parseInt("070");  //70  注意,javascript5引擎已经不具备解析八进制的能力,因此前导的0会被认为无效。
var num6 = parseInt("70");  //70
var num7 = parseInt("0xf");  //15
//    so 针对整数格式的转换的困惑,可以为这个函数提供第二个参数,即:
var num55=parseInt("070",8);  //56
var num66=parseInt("70",10);  //70
var num77=parseInt("0xf",16); //15//    so 多数情况下,我们要解析的都是十进制数值,因此始终将10作为第二个参数是非常必要的。

与parseInt()类似,parseFloat()也是从第一个字符开始解析,直到遇见一个无效的浮点数字字符为止。也就是说字符串中的第一个小数点是有效的,而第二个小数点就是无效了。

其次,parseFloat()只解析十进制值,因此十六进制会被解析为0;

var num1=parseFloat("1234blue"); //1234
var num2=parseFloat("0xA"); //0
var num3=parseFloat("22.5"); //22.5
var num4=parseFloat("22.34.5"); //22.34
var num5=parseFloat("0908.5"); //0908.5
var num6=parseFloat("3.125e7"); //31250000

5)String类型

字符串可以用双引号(“)或者单引号(‘)表示;

String数据类型包含一些特殊的字符字面量,也叫转义序列

字面量 含义
\n 换行
\t 制表
\b 空格
\r 回车
\f 进纸
\\ 斜杠
\‘ 单引号(’),在用单引号表示字符串时使用。例如:‘He said,\‘hey.\‘’
\" 双引号(”),在用双引号表示字符串时使用,例如:"He said,\"hey.\""
\xnn 以十六进制代码nn表示的一个字符串(其中n为0~F)。例如,\x41表示“A”
\unnn 以十六进制代码nnnn表示的一个Unicode字符串(其中n为0~F)。例如,\u03a3表示希腊字符Σ

 

toString()方法

注意这个是方法跟parseInt()是函数的区别。

  • 数值、布尔值、对象和字符串值都有toString()方法,但null和undefined值没有这个方法。
  • 多数情况下,不必传递参数。但也可以指定基数,改变输出的值。
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"

String()函数

注意:是函数

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

  • 如果值有toString()方法,则调用该方法(没有参数)
  • 如果值是null,则返回“null”
  • 如果值是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"

6)Object对象类型

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

var o=new Object();

详见。。。。。。

时间: 2024-11-13 08:04:51

《高级程序设计》3.4 数据类型的相关文章

【Javascript高级程序设计】数据类型与typeof

数据类型:undefined.null.boolean.string.number.复杂数据类型object 共六种 typeof:undefined.object.boolean.string.number.function  六种 console.log(typeof null); //object null值表示一个空对象指针 undefined主要目的是用于比较.可以区分空对象指针与未经初始化的变量. var message; console.log(message); //undefi

《Javascript高级程序设计》阅读记录(二):第四章

这个系列之前文字地址:http://www.cnblogs.com/qixinbo/p/6984374.html 这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较深入,而且实际使用价值较大的内容记录下来,并且注释上我的一些想法.做这个一方面是提升了我的阅读效果以及方便我以后阅读 另一个目的是,Javascript高级程序设计这本书内容很多也很厚,希望其他没有时间的人可以通过看这系列摘录,就可以大体学到书里面的核心内容. 绿色背景的内容是我认为比较值得注意的原著内容.

javascript高级程序设计笔记1

最近在看javascript高级程序设计,看之前觉得自己的js学得还不错,然后,看了没几页就觉得自己好像没有学过一样,这主要写写我以前不完全了解的一些知识. 首先是关于基本数据类型的,从Number开始,以前经常用parseInt来转换数值,看过书才知道,这个函数的本意是专门用于把字符串转换成数值,而且以前也不知道它具体是怎么一个转换规则.先来看看Number()函数的转换规则: 1.如果是Boolean 值,true 和false 将分别被转换为1 和0.2.如果是数字值,只是简单的传入和返回

阅读摘录《javascript 高级程序设计》01

前言: 因为工作需要,所以开始主攻前台JS方面的技术.在以前的工作中,使用过这门脚本语言.但是都是比较凌乱的,用到什么学什么,只是为了实现业务,而去使用. 不会考虑到代码优化,封装对象等.今次特意借了这本<javascript 高级程序设计> ,在每个晚上抽出一个小时来看这本纸质书,系统的学习这门语言. 本文中摘录的都是一些在阅读中,感觉比较重要的信息.如果文中出现差错,欢迎园友拍砖. 摘录: 数据类型 undefined  使用var声明 但未对其初始化 Null null值 Boolean

JavaScript高级程序设计31.pdf

其它方面的变化 DOM的其他部分在"DOM2级核心"中也发生了一些变化,这些变化与XML命名空间无关,而是确保API的可靠性及完整性 DocumentType类型的变化 DocumentType类型新增了3个属性:publicId.systemId和internalSubset 其中前两个属性表示的是文档类型声明中的两个信息段,这两个信息段在DOM1级中没有办法访问到 alert(document.doctype.publicId); //文档类型声明PUBLIC后的字符串 alert

Javascript高级程序设计——第三章:基本概念

javascript高级程序设计——第三章:基本概念 一.语法 EMCA-262通过叫做ECMAScript的“伪语言”为我们描述了javascript实现的基本概念 javascript借鉴了C的语法,区分大小写,标示符以字母.下划线.或美元符号($)开头,注释可以用 // 或者/* */ 严格模式: ECMAScript 5引入了严格模式,在严格模式下不确定的行为将得到处理,通过在顶部添加 “use strict”来启用严格模式: function fuc(){ "use strict&qu

Java高级程序设计第三版:基本概念

严格模式 ? 1 2 3 4 5 6 function fun(){   "use strict";  //启用严格模式,作用域函数  }   "use strict";  //全局 变量 变量定义需要用var,如果没有通过var定义的变量会由于相应变量不会马上有定义而导致不必要的混乱. 数据类型 5种基本数据类型:Undefined.Null.Boolean.NUmber.String 1种复杂数据类型:Object typeof 对未初始化的和未声明的变量执行t

JavaScript高级程序设计学习笔记--基本概念

1.语句 ECMAScript中的语句以一个分号结尾:如果省略分号,则由解析器确定语句的结尾,如下例所示: var sum=a+b //即使没有分号也是有效的语句--推荐 var diff=a-b; //有效的语句--推荐 虽然语句结尾的分号不是必需的,但我们建议任何时候都不要省略它.两个原因:1.加上分号可以避免很多错误 2.加上分号也会在某些情况下增进代码的性能,因为这样解析器就不必再花时间 推测应该在哪里插入分号了. 2.变量 var message="hi"; 像这样初始化变量

JS高级程序设计拾遗

<JavaScript高级程序设计(第三版)>反反复复看了好多遍了,这次复习作为2017年上半年的最后一次,将所有模糊的.记不清的地方记录下来,方便以后巩固. 0. <script>元素属性 async表示立即下载脚步,但不应该妨碍页面中其他操作: defer表示延迟到文档完全被解析和显示之后再执行.这两个属性都仅适用于外部脚步,而且现实中脚步不一定按顺序执行.指定async属性的目的是不让页面等待脚步下载和执行. 最好只包含一个延迟脚本,把延迟脚本放在页面最底部仍然是最佳选择.

1 《JavaScript高级程序设计》学习笔记(1)

欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 首先,我将从<JavaScript高级程序设计>这本JavaScript学习者必看的经典教程开始,JavaScript的很多语法规则及习惯用法和Java极其相似,因此对于有Java基础的学习者来说,JS是很容易上手的.该系列的每次更新将对应原书的一章内容,本次更新对应原书的第三章,主要是一些基本概念,内容很简单, 知识点也较少. 1.和一般的编程语言一样,标识符可以由字母.数字.下划线和美元符组成