JS第3章——类型、值和变量

一、数字

和其他编程语言不同的是,JavaScript不区分整数值和浮点数值。JavaScript中的所有数字均用浮点数值来表示。

  当一个数字直接出现在JavaScript程序中,我们称之为“数字直接量”。

  JavaScript中的数字直接量分为“整型直接量”和“浮点型直接量”。

  1、整型直接量

    在JavaScript中,用一个数字序列表示一个十进制整数。

    除了十进制的整型直接量,JavaScript同样能识别十六进制(以16为基数)值,以0x或0X为前缀。

    ES6的严格模式明令禁止不许使用八进制直接量。

  2、浮点型直接量

    eg:var i=1.2;

  3、NaN

    NaN是JavaScript中很特殊的一个值,意为“不是一个数字”。

    它和任何值都不相等,包括和它自己。具体的表现如下:

    

    也就是说,没有办法通过x==NaN来判断变量x是否为NaN。怎么办?

    使用函数isNaN()来判断。如果参数是NaN或者是一个非数字值,则返回true。如下图:

    

    如何理解:isNaN("hello")?

    "hello"不是一个数字吗?是的(true),"hello"不是数字而是字符串。

 

二、文本

  字符串(string)是一组由16位值组成的不可变的有序数列,每个字符通常来自于Unicode集。

  JavaScript中通过字符串类型来表示文本。

  字符串的长度是其所含16位值的个数。

  1、字符串直接量

    在JavaScript中的字符串直接量,是由单引号or双引号括起来的字符序列。

    以前,字符串直接量必须写在一行中。

    在ES5中,字符串直接量可以拆分成数行,单每行必须以反斜线(\)结束。

    

  2、转义字符

    常用的转义字符有:

    \n  换行符

    \r  回车符

    \"  双引号

    \'  单引号

  3、字符串的使用

  4、模式匹配

 

三、布尔值

  JavaScript中只有6个值会被转换为false。分别是:

  • undefined
  • null
  • 0
  • -0
  • NaN
  • ""

  其他的值,包括对象or数组都会转换成true。

 

四、null和undefined

  大多数计算机语言,有且仅有一个表示“无”的值。比如C语言中的null,Java语言中的null。

  有点奇怪的是,JavaScript语言居然有两个表示"无"的值:undefined和null。

  1、历史原因

  JavaScript在1995年诞生之际,和Java一样,只设置了null作为表示“无”的值。

  根据C语言的传统,null被设计成可以自动转化为0

  

  但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。

  首先,null像在Java中一样被当成一个对象。但是,JavaScript的数据类型分成原始类型(primitive)和合成类型(complex)两大类,Brendan Eich觉得表示"无"的值最好不是对象。

  其次,JavaScript的最初版本没有错误处理机制,发生数据类型不匹配时,往往是自动转换类型or默默地失败。Brendan Eich认为,如果null自动转为0,很不容易发现错误。

  因此,Brendan Eich又设计了一个undefined。

  2、最初设计

  JavaScript的最初版本是这样区分的:

    null是一个表示“无”的对象,转为数值时为0。

    undefined时一个表示"无"的原始值,转为数值为NaN。

  

  3、目前的用法

  但是,上面这样的区分,在实践中很快就被证明不可行。目前,null和undefined基本是同义的,只是有一些细微的差别。

  null表示“没有对象”,即该处不应该有值。典型用法是:

  (1)作为函数的参数,表示该函数的参数不是对象。

  (2)作为对象原型链的终点。

  undefined表示“缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:

  (1)变量被声明了但还没有赋值时,就等于undefined

  (2)调用函数时,应该提供的参数没有提供,该参数等于undefined。

  (3)对象没有赋值的属性,该属性的值为undefined。

  (4)函数没有返回值时,默认返回undefined。

  

 

五、全局对象

六、包装对象

七、不可变的原始值和可变的对象引用

    JavaScript中的原始值与对象有着根本区别。原始值是不可更改的,而对象的属性or方法是可以被修改的。

  原始值:undefined、null、布尔值、数字和字符串

  对象:数组、函数

  对象和原始值不同。

  首先,它们是可变的——它们的值时可以修改的。

  

  其次,对象的比较并非是值的比较。即使两个对象包含同样的属性和相同的值,它们也是不相等的。因为对象的比较比较的是存储空间的地址。

  也就是说,两个单独的对象永远不相等!两个单独的数组也永远不相等!

 

八、类型转换

posted @ 2017-02-24 16:29  SYang_Summer  阅读(128)  评论(0编辑  收藏  举报