温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Javascript基本的数据类型以及对象类型有哪些

发布时间:2021-09-30 16:27:06 来源:亿速云 阅读:110 作者:柒染 栏目:开发技术

Javascript基本的数据类型以及对象类型有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

  有程序设计经验的读者肯定知道,在C或者Java这样的语言中,数据是有类型的,比如用以表示用户名的属性是字符串,而一个雇员的年龄则是一个数字,表示UI上的一个开关按钮的数据模型则为布尔值等等,对数字可能还可以细分为浮点数,整型数,整型数又可能分为长整型和短整型,总而言之,它们都表示语言中的数据的值的类型。

  Javascript基本数据类型有哪些

  在JavaScript中,包含三种基本的数据类型,字符串(String),数值(Number),布尔值(boolean),下面是一些简单的例子:

  var str="Hello,world";//字符串

  var i=10;//整型数

  var f=2.3;//浮点数

  var b=true;//布尔值

  我们可以分别查看变量的值及变量的类型:

  print(str);

  print(i);

  print(f);

  print(b);

  print(typeof str);

  print(typeof i);

  print(typeof f);

  print(typeof b);

  注意,在此处使用的print()函数为rhino解释器的顶层对象的方法,可以用来打印字符串,通常情况下,在客户端,程序员多使用alert()进行类似的动作,alert()是浏览器中JavaScript解释器的顶层对象(window)的一个方法。

  Hello,world

  10

  2.3

  true

  string

  number

  number

  Boolean

  在JavaScript中,所有的数字,不论是整型浮点,都属于“数字”基本类型。typeof是一个一元的操作符,在本章的另外一个小节会专门讲到。

  Javascript对象类型有哪些

  这里提到的对象不是对象本身,而是指一种类型,我们在第三章会对对象进行详细的讨论,此处的对象包括,对象(属性的集合,即键值的散列表),数组(有序的列表),函数(包含可执行的代码)。

  对象类型是一种复合的数据类型,其基本元素由基本数据类型组成,当然不限于基本类型,比如对象类型中的值可以是其他的对象类型实例,我们通过例子来说明:

  var str="Hello,world";

  var obj=new Object();

  obj.str=str;

  obj.num=2.3;

  var array=new Array("foo","bar","zoo");

  var func=function(){

  print("I am a function here");

  }

  可以看到,对象具有属性,如obj.str,obj.num,这些属性的值可以是基本类型,事实上还可以更复杂,我们来看看他们的类型:

  print(typeof obj);

  print(typeof array);

  print(typeof func);

  //将打印出

  object

  object

  function

  读者可能会对print(typeof array)打印出object感到奇怪,事实上,对象和数组的界限并不那么明显(事实上它们是属于同一类型的),但是他们的行为却非常不同,本书的后续章节将两个重要的数据类型做了分别介绍。

  两者之间的转换

  类似与Java中基本数据类型的自动装箱拆箱,JavaScript也有类似的动作,基本数据类型在做一些运算时,会临时包装一个对象,做完运算后,又自动释放该对象。我们可以通过几个例子来说明:

  var str="JavaScript Kernal";

  print(str.length);//打印17

  str为一个字符串,通过typeof可知其type为”string”,而:

  var str2=new String("JavaScript Kernal");

  print(typeof str2);

  可知,str2的type为”object”,即这两者并不相同,那么为什么可以使用str.length来的到str的长度呢?事实上,当使用str.length时,JavaScript会自动包装一个临时的String对象,内容为str的内容,然后获取该对象的length属性,最后,这个临时的对象将被释放。

  而将对象转换为基本类型则是通过这样的方式:通过调用对象的valueOf()方法来取得对象的值,如果和上下文的类型匹配,则使用该值。如果valueOf取不到值的话,则需要调用对象的toString()方法,而如果上下文为数值型,则又需要将此字符串转换为数值。

  由于JavaScript是弱类型的,所以JavaScript引擎需要根据上下文来“猜测”对象的类型,这就使得JavaScript的效率比编译型的语言要差一些。

  valueOf()的作用是,将一个对象的值转换成一种合乎上下文需求的基本类型,toString()则名副其实,可以打印出对象对应的字符串,当然前提是你已经“重载”了Object的toString()方法。

  事实上,这种转换规则会导致很多的问题,比如,所有的非空对象,在布尔值环境下,都会被转成true,比如:

  function convertTest(){

  if(new Boolean(false)&&new Object()&&new String("")&&new Array()){

  print("convert to boolean")

  }

  }

  convertTest();//convert to Boolean

  初学者容易被JavaScript中的类型转换规则搞晕掉,很多情况下会觉得那种写法看着非常别扭,其实只需要掌握了规则,这些古怪的写法会大大的提高代码的性能,我们通过例子来学习这些规则:

  var x=3;

  var y=x+"2";//=>32

  var z=x+2;//=>5

  print(y);

  print(z);

  if(datamodel.item){

  //do something...

  }else{

  datamodel.item=new Item();

  }

  这种写法事实上具有更深层次的含义:

  应该注意到,datamodel.item是一个对象(字符串,数字等),而if需要一个boolean型的表达式,所以这里进行了类型转换。在JavaScript中,如果上下文需要boolean型的值,则引擎会自动将对象转换为boolean类型。转换规则为,如果该对象非空,则转换为true,否则为false.因此我们可以采取这种简写的形式。

  而在传统的编程语言(强类型)中,我们则需要:

  if(datamodel.item!=null){

  //do something...

  }else{

  datamodel.item=new Item();

  }

  数据类型的判断

  前面讲到JavaScript特性的时候,我们说过,JavaScript是一个弱类型的语言,但是有时我们需要知道变量在运行时的类型,比如,一个函数的参数预期为另一个函数:

  function handleMessage(message,handle){

  return handle(message);

  }

  当调用handleMessage的函数传递的handle不是一个函数则JavaScript引擎会报错,因此我们有必要在调用之前进行判断:

  function handleMessage(message,handle){

  if(typeof handle=="function"){

  return handle(message);

  }else{

  throw new Error("the 2nd argument should be a function");

  }

  }

  但是,typeof并不总是有效的,比如下面这种情况:

  var obj={};

  var array=["one","two","three","four"];

  print(typeof obj);//object

  print(typeof array);//object

  运行结果显示,对象obj和数组array的typeof值均为”object”,这样我们就无法准确判断了,这时候,可以通过调用instanceof来进行进一步的判断:

  print(obj instanceof Array);//false

  print(array instanceof Array);//true

  第一行代码返回false,第二行则返回true。因此,我们可以将typeof操作符和instanceof操作符结合起来进行判断。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI