1.ECMAScript数据类型

  5种简单数据类型,分别是:

    Undefined

    Null

    Boolean

    Number

    String

  1种复杂数据类型:

    Object

(1)typeof操作符——检测给定变量的数据类型

  “undefined”——未定义

  “boolean”——布尔值

  “string”——字符串

  “number”——数值

  “object”——对象或是null

  “function”——函数

eg:

  1. <script type="text/javascript">
  2. var m="hello!"
  3. alert(typeof(m));
  4. alert(typeof m);
  5. alert(typeof 93);
  6. </script>

出现3个提示框,分别是:

注意:(1)以上例子说明,typeof操作符的操作数可以是变量,也可以是数值字面量。

   typeof是一个操作符,而不是一个函数,所以例子中的圆括号可以使用,但不是必需的。

     (2)调用 typeof null返回的是 “Object” ,因为特殊值null被认为是空的对象引用。

2.Undefined类型

  undefined类型只有一个值,即特殊的undefined。使用var声明变量但没有进行初始化赋值时,这个变量的值就是undefined。

  eg:

  

  1. var message;
  2. alert(message);

  结果图:

  上面的例子只是声明了变量message,但没有对其进行初始化。

注意:

  (1)未经初始化的变量,其默认值为undefined,与没有进行定义的变量是不一样的。

eg:

  1. var message;
  2. alert(message);
  3. alert(age);

第三行会出现错误:

  

  运行以上代码,第一个警告框会显示变量message的值,即undefined。第二个警告框由于传递给alert()函数的是没有声明的变量age,则会导致一个错误。

  对没有声明的变量,只能执行一项操作,即使用typeof操作符检测其数据类型(对没有声明的变量调用delete不会导致错误,但是这样做没有实际意义,而且在严格模式下会导致错误。)

  (2)使用alert()函数,输出的变量的值,已经定义声明,但是没有进行初始化的变量的值为“undefined”,使用typeof操作符输出的变量的数据类型,已经定义声明,但是没有进行初始化的变量的数据类型也是“undefined”。

  (3)对没有定义的变量使用typeof操作符同样也是返回undefined。

  eg:

  1. var message;
  2. alert(typeof message);
  3. alert(typeof age);

上面的代码会出现两个警告框,都是显示“undefined”。

3.Null类型

  null类型的数据只有一个值,就是null,null值表示一个空对象的指针,当用typeof操作符检测null时,会返回“object”。

eg:

  1. var car=null;
  2. alert(typeof(car));

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

alert(null==undefined);

    

注意:

  尽管null和undefined有这样的关系,但是它们的用途是完全不同的。我们知道,在一般情况下,都没有必要把一个变量的值显式地设置为undefined,但是null却不同,只要意在保存对象的变量还有真正保存对象,就应该明确地让该变量保存为null值。

  这样做不仅可以体现null作为空对象指针的惯例,也有助于进一步区分null和undefined。

4.Boolean类型

  (1)该类型的值:true和false。(这两个值和数字值不是一回事,因此true不一定等于1,false不一定等于0。)

  注意:Boolean类型的字面值是区分大小写的。

  (2)ECMAScript中所有类型的值都有与Boolean值等价的值。要将一个值转化为其对应的Boolean值,可以转换函数Boolean(),至于放回的值是true还是false,取决于要转换至的数据类型及其实际值。

注:各种数据类型及其对应的转换规则,详见高程P26.

5.Number类型

  (1)八进制字面值的第一位必须是0,当数字序列超过0~7时,前导0会被忽略,后面的数字将当做十进制数值解析。

    八进制子在严格模式下无效的,会导致Javascript引擎抛出错误。

  (2)在进行算术运算时,八进制和十六进制都会被转换成十进制数值。

  (3)浮点数:该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。

    注意:由于保存浮点数值需要的内存空间是保存整数的两倍,因此ECMAScript会不失时机地将浮点数转换为整数来保存。显然,如果小数点后没有任何数字,这个数值可以作为整数来保存,如果浮点数值本身就是一个整数(eg:1.0),那么该值也会被转换为整数。

  (4)默认情况下,ECMAScript会将小数点后面带有6个零以上的浮点数值转换为以e表示法表示的数值。

  (5)浮点数的最高精度为17位小数,但是在进行计算时其精度远不如整数。

    eg:0.1+0.2的结果不是等于0.3,而是等于0.30000000000000004.

用代码测试情况如下:

var a=0.1,b=0.2;
    if(a+b==0.30000000000000004){
        alert("You got 0.3");
    }

结果:

当代码为:

var a=0.1,b=0.2;
    if(a+b==0.3){
        alert("You got 0.3");
    }

时,测试无法通过。

因此,一般不要测试某个特定的浮点数值。

  

  

JS高程3.基本概念(2)的更多相关文章

  1. JS高程3.基本概念(4)操作符

    ECMA-262用于操作数据值的操作符包括: 算术操作符 位操作符 关系操作符 相等操作符 ECMAScript操作符的不同之处在于:它能够适用于很多值,包括字符串,数字值,布尔值,甚至是对象.(在应 ...

  2. JS高程3.基本概念(3)

    1.ECMAScript数值的范围 由于内存的限制,在大多数浏览器中,ECMAScript能够拿保存的数据的范围是 5e-324 ~ 1.7976931348623157e+308,其中最小的数值保存 ...

  3. JS高程3.基本概念(1)

    1.语法 (1)ECMAScript中的一切(变量,函数名和操作符)都是区分大小写的. (2)标识符 标识符的第一个字符必须是字母,下划线或是美元符号. 其他字符可以是字母,下划线,美元符号和数字. ...

  4. JS高程3.基本概念(6)函数

    1.ECMAScript中的函数使用function关键字来声明. eg: function sum (num1,num2){ alert(num1+num2); } sum(3,7); 注意: 在有 ...

  5. JS高程3.基本概念(5)语句

    1.if语句 2.do-while语句:后测循环语句,循环体内的代码至少执行一次. 3.while语句:前测循环语句. 4.for语句:前测循环语句. 注意:在ECMAScript中不存在块级作用域, ...

  6. js 高程 函数节流 throttle() 分析与优化

    在 js 高程 22.3.3章节 里看到了 函数节流 的概念,觉得给出的代码可以优化,并且概念理解可以清晰些,所以总结如下: 先看 函数节流 的定义,书上原话(斜体表示): 产生原因/适用场景: 浏览 ...

  7. 吃透Javascript数组操作的正确姿势—再读《Js高程》

    Javascript中关于数组对象的操作方法比较多也比较杂,正好再次捡起<Javascript高级程序设计>来读,把它们一一总结梳理了一下: 方法类别 方法名称 方法描述 参数 返回值 备 ...

  8. 《JS高程》创建对象的7种方式(完整版)

    一.理解对象 ECMA-262定义对象:无序属性的集合,其属性可以包含基本值.对象或者属性. 我们可以把 ECMAScript 的对象想象成 散列表:无非就是一组 名值对,其中值可以是数据或函数. 创 ...

  9. 《JS高程》事件学习笔记

    事件:文档或浏览器窗口中发生的一些特定的交互瞬间,也即用户或浏览器自身执行的某种动作. -------------------------------------------------------- ...

随机推荐

  1. WCF学习之旅——第一个WCF示例(三)

    第五步:创建客户端 WCF应用服务被成功寄宿后,WCF服务应用便开始了服务调用请求的监听工作.此外,服务寄宿将服务描述通过元数据的形式发布出来,相应的客户端就可以获取这些元数据.接下来我们来创建客户端 ...

  2. TSQL 聚合函数忽略NULL值

    max,min,sum,avg聚合函数会忽略null值,但不代表聚合函数不返回null值,如果表为空表,或聚合列都是null,则返回null.count 聚合函数忽略null值,如果聚合列都是null ...

  3. Sql Server系列:视图

    视图是数据库中的一种虚拟表,与真实的表一样,视图包含一系列带有名称的行和列数据.行和列数据用来自定义视图的查询所引用的表,并且在引用视图时动态生成. 1. 视图的概念 视图是从一个或者多个表中导出的, ...

  4. ASP.NET Core的配置(4):多样性的配置来源[下篇]

    我们在上篇和中篇对配置模型中默认提供的各种ConfigurationProvider进行了深入详尽的介绍,如果它们依然不能满足项目中的配置需求,我们可以还可以通过自定义ConfigurationPro ...

  5. 写在最前面 - 每天5分钟玩转 OpenStack(1)

    <每天5分钟玩转 OpenStack>是一个 OpenStack 教程,这是第 1 篇. 这个教程有下面两个特点: 系统讲解 OpenStack 从架构到各个组件:从整体到细节逐一讨论 重 ...

  6. 【基础进阶】URL详解与URL编码

    作为前端,每日与 URL 打交道是必不可少的.但是也许每天只是单纯的用,对其只是一知半解,随着工作的展开,我发现在日常抓包调试,接口调用,浏览器兼容等许多方面,不深入去理解URL与URL编码则会踩到很 ...

  7. 巧用css提高浏览器兼容性

    body,div,ul,ol,li,dl,dt,dd,h1,h2,h3,h4,h5,h6,form,input,textarea,p{ margin:0px; padding:0px; font-si ...

  8. iOS_常用C语言函数

    一.随机数: 1.rand(); 范围:        0-无穷大. 特点:        仅第一次随机,其他次都是和第一次相同.常用于调试. 返回值:     long 实例:        int ...

  9. Java中读文件操作

    InputStream & Reader InputStream(字节流),如下是InputStream的层次结构: AudioInputStream:音频输入流类,该方法可以: 从外部音频文 ...

  10. 导入android-support-v4.jar的方法

    在导入使用了ViewPage,ActionBar,Fragment的工程后出现错误,很有可能是没有导入4.0版本的支持包. 正确导入方法为: 首先在Project->properties-> ...