JavaScript对象基本类型和字面值之间的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript对象基本类型和字面值之间的区别相关的知识,希望对你有一定的参考价值。

问题

人们经常会遇到诸如对象(object),基本类型(primitive)和字面值(literal)这样的术语,这三者之间有何区别。我们又如何分辨他们呢?

解决方案

一个javascript字面值表示某种特定类型的一个值,例如,一个引用的字符串(String)、浮点数(Number)或布尔值(Boolean):

  "this is a string"

  1.89

  true

JavaScript基本类型是特定的数据类型的一个实例。JavaScript中有5种这样的类型:String、Number、Boolean、null和undefind。下面是JavaScript基本类型的一些例子;

  "this is a string"

  null

在这些基本数据类型中,有3个有对应的构造方法对象:String Number和Boolran。这些对象提供了对内建属性和方法的访问,允许我们做一些简单赋值和顺序访问之外的事情。

  var str1 = "this is a string"

  console.log(str1.length)   //访问对象的length属性

申明一个变量的时候,我们就像是在操作简单的字符串或数字一样

  var str1 = "this is a string"

然而,我们实际打开了通知一系列广泛功能的大门。如果不是依赖于JavaScript对象的话,我们可以给变量分配一个字符串,数字或布尔值。随后访问它,然而,如果我们要对变量做更多的事情的话,需要使用该数据类型所对应的JavaScript对象及其属性。例如如果想看一个字符串的长度,我们可以访问String对象的length属性

  var str1 = "this is a string"

  console.log(str1.length)

在幕后。当代码在一个字面值上访问一个String对象属性的时候。会创建一个新的String对象,并且其值设置为变量中所包含的字符串的值。访问并打印出length属性,并且丢掉新创建的String对象。实际上,JavaScript中确实有5个数据类型:字符串,数值,布尔类型,null,和undefind。只有字符串,数值,和布尔数据类型有对应的构造方法对象。字符串、浮点数、整数、和布尔值都是字面值:

  var str1 = "this is a simple string";  //引号里面的字符串就是字面值

   var num1 = 1.89;  //1.89是字面值

   var answer = true;   //true 是字面值

我们可以使用一个字面值表示或使用该对象而不带new操作符、从而创建基本类型的布尔值、字符串和数字变量:

     var str1 = String ("this is a string");  //基本类型字符串

   var num1 = Number(1.89); //基本类型数字

   var bool1 = Boolean(true);  //基本类型布尔值

要有意实例化一个对象。用new操作符:

  var str1 = new String("this is a string");

  var num1 = new Number(1.88);

  var bool1 = new Boolean(true);

当你使用严格相等来比较一个对象示例和一个字面值的时候,你可以快速区分一个基本类型和一个对象实例。  

  var str1 = String("string");

  var num1 =Number("1.88);

  var bool1 = Boolean(true);

  if(str1=="string"){

    console.log(‘equal‘)

  }

  if(num1==1.88){

    sonsole.log(‘equal‘)

  }

  if(bool1==true){

    console.log(‘equal‘)

  }

  var str2 = new String("string");

  var num2 = new Number(1.88);

  var bool2 = new Boolean(true);

  if(str2=="string"){

    console.log(‘not equal‘)

  }

  if(num2==1.88){

    console.log(‘not equal‘)

  }

  if(bool2==true){

    console.log(‘not equal‘)

  }

输出结果如下:

  equal

  equal

  equal

  not equal

  not equal

  not equal

基本类型变量严格的等于字面值,而对象实例则不会。为什么基本类型变量严格地等于字面值呢?因为基本类型是根据值来比较的,而值是字面值。

大多时候,JavaScript开发者不会直接为3种基本数据类型创建对象实例,开发者只是想要像数字,布尔值或者字符串一样起作用的一个数值变量,布尔值或字符串变量。而不是先有一个对象,我们不需要对象的扩展功能,更为重要的是,当开发者在代码中使用严格相等性或类型检查的时候,他们想要与期望的数据类型一致的一个变量,而不是定义为一个"对象":

  var num1 = 1.88;

  var num2 =new Number(1.88);

  console.log(typeof num1); //输出数字

  console.log(typeof num2); //输出对象

 

以上是关于JavaScript对象基本类型和字面值之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

constexpr和字面值常量类

JS对象基本类型和字面量的区别

字符流和字节流的区别

网站前端_JavaScript.0012.JavaScript深入对象

Java字符流和字节流对文件操作的区别

Java连载5-标识符关键字和字面值