JavaScript_ 原始类型(primitive type)


ECMAScript有5种原始类型,即:Undefined、Null、Boolean、Number和String。


typeof运算符

typeof运算符有一个参数,即要检查的变量或值。如:

var sTemp = "our world!";
console.log(typeof sTemp);//输出"string"
console.log(typeof 2);//输出"number"

对变量或值调用typeof运算符将返回下列值之一:

  • undefined - 如果变量是Undefined类型的
  • boolean - 如果变量是Boolean类型的
  • number - 如果变量是Number类型的
  • string - 如果变量是String类型的
  • object - 如果变量是一种引用类型或者是Null类型的

注释:为什么typeof对于null值会返回"Object"。实际身高是JavaScript最初实现的一个错误,然后被ECMAScript沿用了。现在,null被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它任然是原始值。


1、Undefined类型

如前所述,Undefined类型只有一个值undefined,当声明的变量未初始化时,该变量的默认值是undefined。

var vTemp;//声明了一个变量,但是未初始化
console.log(vTemp);//undefined
console.log(typeof vTemp);//"undefined"
console.log(vTemp == undefined);//true
console.log(typeof vTemp == undefined)//false

提示:值undefined并不同于未定义的值。但是typeof运算符并不真正区分这两种值。

var vTemp;//声明一个变量,但是没有进行初始化
console.log(typeof vTemp);//"undefined"
console.log(typeof vTemp2);//"undefined"

前面的代码对两个变量输出地都是"undefined",既是变量vTemp2从未被声明过。如果对vTemp2使用typeof之外的其他运算符的话,就会引起错误,因为其他运算符只能用于被声明与声明 变量。如:

var vTemp;
console.log(vTemp2 == undefined);//这里将会出错

当函数无明确返回值时,范虎的也是只"undefined",如:

function testFunc(){
}
console.log(testFunc() == undefined);//输出true

Null类型
另一种只有一个值的类型是Null,它只有一个专用值null,即它的字面量。值undefined实际上是从值null派生来的,因此ECMAScript把它们定义为相等的。

console.log(null == undefined);//true;

尽管这两个值相等,但他们的含义不同。undefined是声明了变量但未对其初始化时赋予该变量的值;null则用于表示尚未存在的对象。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是null。


3、Boolean类型
Boolean类型是ECMAScript中最常用的类型之一。它有两个值true和false(即两个布尔字面量)。即使false不等于0,0也可以在必要时被转换成false。

var nTest = 0;
var sTest = '0';
var bTest = false;
console.log(nTest == bTest);//true
console.log(sTest == bTest);//true
console.log(nTest === bTest || sTest === bTest);//false

4、Number类型

ECMA-262中定义的特殊的类型是Number类型。这种类型既可以表示32为的整数,还可以表示64为的浮点数。

直接输入的(而不是另一个变量访问的)任何数字都被看做Number类型的字面量。

4.1 整数

  • 十进制:最基本的数值字面量格式是十进制整数——var iNum = 6;
  • 八进制:除了十进制表示外这书还可以通过8进制或16进制的自勉之来表示。其中8进制字面值的第一位必须为0,然后是8进制数字序列(0~7)如果字面值中的数值超出了范围,那么签到0将被忽略,后面的数字当做十进制数值解析。如:
    var octalNum1 = 070;//八进制的56
    var octalNum2 = 079;//超出范围,被解析为--十进制的79
    var octalNum3 = 08;//超出范围,被解析为--十进制的8

    八进制字面量在严格模式下是无效的,会导致JavaScript引擎跑出错误。

  • 十六进制:十六进制字面值的前面两位必须是0x,后跟任何十六进制的数字(0~9 and A~F)。其中,字母A~F可以大写,也可以小写。如:
    var hexNum1 = 0xA;//十六进制的10
    var hexNum2 = 0x1f;//十六进制31

    提示:在进行算术计算时,所有的8进制和16进制数值都会被转换为十进制进行计算。

4.2 浮点数

所谓浮点数,就是该数值中必须包含一个小数点。并且小数点后面必须至少有一位数字。定义一个浮点值,如:

var fNum = 5.0;

:1)对于浮点字面量,用它进行及孙倩,真正存储的是字符串;

  2)虽然var fNum = .1这种写法有效,但是不推荐。

4.3特殊的Number值

  • Number.MAX_VALUE和Number.MIN_VALUE,它们定义了Number值集合的外边界,所有ECMAScript数都必须在这两个值之间。不过计算生成的数值可以不落在这两个值之间。
  • 当计算生成的数大于Number.MAX_VALUE时,它将被赋予值Number.POSITIVE_INFINITY;小于Number.MIN_VALUE时被赋予Number.NEGATIVE_IFINITY,意味着不再有数字值。如果返回的结果是无穷大值,俺么生成的结果不能那个再用于其他计算。
  • 当然,有专门的值表示无穷大,即Infinity。Number.POSITIVE_INFINITY 的值为 Infinity。Number.NEGATIVE_INFINITY 的值为 -Infinity。
  • NaN(Not a Number)是一个特殊的数值
    var iNum = 9, sTemp = '9', sTemp2 = 'red';
    console.log(iNum/0);//输出Infinity
    console.log(sTemp/0);//"Infinity"
    console.log(sTemp2/0);//"NaN"
    console.log(sTemp2/1);//"NaN"

优质内容筛选与推荐>>
1、叩开C#之门系列之几个重要名词
2、maven的profile 目录、变量打包
3、Java 11 究竟比 8 快了多少?看看这个基准测试
4、使用grep过滤make的输出内容
5、POJ1011-Sticks


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn