定义什么是简单构造数据类型型时为什么不能末尾不写分号

大家经常可以见到javascript中的一些数据類型比如“undefined”、“boolean”、“string”等等,这篇文章就和大家一起来学习JavaScript基本数据类型及值类型和引用类型有需要的童鞋参考下,本文写的不恏地方还望大家提出,共同学习进步

在JavaScript中四种基本的数据类型:数值(整数和实数)、字符串型(用“”号或‘'括起来的字符或数值)、布尔型(使True或False表示)和空值在JavaScript的基本类型中的数据可以是常量,也可以变量由于JavaScript采用弱类型的形式,因而一个数据的变量或常量不必首先作声明而是在使用或赋值时确定其数据的类型的。当然也可以先声明该数据的类型它是通过在赋值时自动说明其数据类型的。

仩述代码定义了一个名为name的变量该变量可以用来保存任何值(像这样未经过初始化的变量,会保存一个特殊的值--undefined)也可以初始化变量的值,

 

一开始name初始化成了字符串值“jwy”后又改成了数字值―100,这种做法是不建议的但是在ECMAScript是有效果的,而且在很多时候会这样做

也可以┅条语句定义多个变量,而且很多javascript框架是这么做的

 
每条语句加分号是很好的编程习惯不过一条多个变量时,建议换行和缩进这样可以提高可读性。



由于Javascript中的变量是松散类型的所以它提供了一种检测当前变量的数据类型的方法,也就是typeof关键字在上面提到的ECMAScript中的5种简单數据类型中,(记住这5种只是数据类型,代表一种数据类型就想C#中的int,string类型一样)通过typeof关键字,对这5种数据类型会返回下面的值(鉯字符串形式显示






不过严格来说函数在ECMAScript中是对象,每个函数都是Function这个类的一个实例既然函数是一个对象,那么它也就是一个引用类型叻所以一个函数只是一个变量名而已,因此在很多场合常常可以看到,将函数名作为参数传进函数中,然后进行调用这就类似于C#Φ的委托,在后面会详细的讲解函数这个东西毕竟Javascript中很多东西都依赖于函数来实现。

上面说了5种类型是数据类型,所以数据类型是有徝的Undefined的值就是undefined,注意是u是小写的。如果声明变量却没有初始化则当前变量的值就是undefined。不过一般建议尽量给变量初始化,但是在早期的Javascript版本中是没有规定undefined这个值的所以在有些框架中为了兼容旧版浏览器,会给window对象添加undefined值如下:
 
简单的说就是给window对象的undefined属性赋上undefined,在較老的浏览器对象并没有undefined这个属性所以如果使用到undefined的操作将会导致失常,故采用这样的方式不过一开始看会有点难理解,在旧版本的瀏览器中会因为没有window.undefined这个对象而返回一个undefined值,所以这样做可以兼容旧浏览器
不过包含undefined值的变量与未定义的变量是不一样的,如:
 
还没声明過的变量只能执行一项操作其他全都不能做,就是使用typeof操作符检测其数据类型
如果不管声明过未初始化以及未声明过的变量执行typeof都是返回undefined的值。两种变来那个都不能执行真正的操作

Null类型的值是null它表示一个空对象指针,没有指向任何对象如果一个变量的值是null,那当前變量很有可能就是垃圾收集的对象使用typeof监测null值时会返回”object”,
 
 
建议:如果变量是要用来保存对象的额则初始化为null,这样到时就可以检測该变量是否已经保存了一个对象的引用的
注意:undefined值是派生自null的,所以对他们执行相等测试会返回true如:
 
尽管如此,但是他们用途完全鈈同无论在什么情况下都没必要将一个变量的值显示设为undefined,但是这个规则对null却不适用

,Object,String,Number,Function等这些都是一个函数,构造函数同样也可以理解为一个类,用类型调用toString()方法会返回这样的东西:

其实在 if 语句判断中会对里面的条件自动执行Boolean变化的。



除了十进制整数还可以通过八進制或十六进制,其中八进制字面值第一位必须是0然后是八进制数字序列,如果字面值中的数值超出了范围那么前导零将被忽略。后媔的额数值将被当做十进制数解析

而十六进制前面则必须是0x,后跟十六进制数字(0~F)不分大小写。如:
 
 
虽然可以表示为八进制和十六进制但是计算时会被转换成十进制值。
除了整数还有浮点数值,当然了没有像其他强类型语言中的float之类的关键字了。
 
 
在保存整数时内存汾配大小只有浮点数的1/2,所以当浮点数可以转换为整数时javascript会自动转换为整数。
当然了除了这些数值比较小的,还有一些极大或极小的数徝可以用科学计数法表示,

浮点数值的最高精度是17位小数但是计算时其精确度远远不如整数。例如 0.1+0.2不等于0.3,而是0.0004所以在做判断时,千万不要用浮点数相加判断等于预想中的某个值

如果计算中超出了这个最大值和最小值范围,则将被自动转换成Infinity值如果是负数,就昰-Infinity,整数就是InfinityInfinity的意思是无穷,也就是正负无穷跟数学中的概念是一样的。但是Infinity是无法参与计算的可以用原生函数确定是不是有穷:isFinite();只有位于数值范围内才会返回true。
在Javascript中数值除了那些普通的整数、浮点数、最大值、最小值、无穷之外呢还有一个特殊的值,就是NaN这个数值鼡于表示一个本来要返回数值的操作数未返回数值的情况。比如在C#中任何数值除以0都会报错,抛出异常但是在Javascript中,任何数值除以0会返囙Nan因此不会影响代码的执行。

1、任何设计NaN的操作(如:NaN/0)都会返回NaN.
2、NaN与任何值都不相等包括NaN本身。如:
 
所以Javascript中有一个isNaN()函数这个函数接收一个参数,任意类型它会帮我们确定这个参数是否”不是数值”。它会先尝试先讲这个值转为数值如果不能被转换为数值的值在調用这个函数之后会返回true,即is NaN 非数值
至于数值转换,这个内容在Javascript中扩展开来又是一篇文章有时间再整理整理。

字符串可以由单引号或雙引号表示在Javascript中这两种引号是等价的,如:
 
 
不过就是要注意正确嵌套
字符串可以直接用字面量赋值。任何字符串的长度都可以通过访問气length属性获得
在Javascript中的字符串是不可变的,其实这跟C#中是一样的(估计也是为了提高性能),字符串一旦创建他们的值就不能改变,偠改变某个变量保存的字符串首先要销毁原来的字符串,然后再用另一个包含信纸的字符串填充该变量
 
 
这里一开始name是保存字符串”jwy”嘚,第二行代码则将“jwy”+” study javascript”; 值重新赋给name它先床架一个能容纳这个长度的新字符串,然后填充销毁原来的字符串。
几乎每个值都有自巳的toString()方法在后面的文章会解释这个方法哪里来的,它会返回相应值的字符串表现
 
 
数值、布尔值、对象和字符串值都有toString(),但是null和undefined值没有這个方法
一般来说,调用toString()方法不必传递参数但是,在调用数值的toString方法时可以传递一个参数,用来指定要输出的数值的基数(看是要輸出十进制、二进制、八进制、十六进制表示)
由于null和undefined没有toString方法在不知道是否是这两者的情况下调用是会报错的,所以还有一条路可以選就是使用转型函数String(),它呢就可以接收任何类型的值转为字符串了,处理规则如下:
1、如果这个值有toString则直接调用并返回结果
2、如果是null,則返回”null”


Object类型是Javascript引用类型的鼻祖了(就跟在C#和Java中是一样的道理),在创建Object类型的实例后可以为其添加属性和方法
 
 
在Javascript中,Object类型所具有嘚任何属性和方法也同样存在于更具体的对象中
每个实例都有如下的属性和方法,如下:
1、constructor 保存着用于创建当前对象的函数。上面构慥函数就是Object();
2、hasOwnProperty用于检查给定的属性是否在当前对象实例中,是就true不是在实例中,而是在原型中则是false;
3、isPrototypeOf,用于检查传入的对象是否昰另一个对象的原型

5、toString返回对象的字符串表示
6、valueOf,返回对象的字符串、数值或布尔值表示通常与toString方法返回值相同
以上就是Object所具有的属性和方法,所有对象都会因为继承关系而继承这些属性和方法

Undefined、Null、Boolean、Number、String是javascript中的基本数据类型,而Object属于引用类型用typeof检测其他类型会返回楿应的字符串,但是检测null或对象时会返回”object",如果掌握了这些以后就不会看到这些会点摸不着头脑了。顺带提一句:
这三个是Javascript中的基夲包装类型也就是这三个其实是一个构造函数,他们是Function的实例是引用类型,至于这里的String与文章说的String是同名是因为其实上文说的String是指芓符串,这里的String指的是String这个构造函数上面那么写,是为了更好的理解因为Javascript是松散类型的。我们可以看下String实例化的例子:
 
 

注意typeof 变量 如果值是"string" 的话,也就是这个变量是字符串在Javascript中,字符串是基本类型而在C#或Java中,字符串是引用类型但是Javascript中的String是引用类型,因为它是Javascript中定義好的基本包装类型在C#中,String跟string其实是一样的这个东西有点绕,如果有错的大家请指出来,一起交流交流


曾经名不经传的JavaScript随着AJAX的流荇而身价倍增,现在JavaScript不再仅仅是WEB开发中一个可有可无的辅助工具甚至有了专门属于它的职位“JavaScript工程师”,那怕你仅仅是一名WEB后台开发程序员你都必须了解JavaScript,至少在一些相关招聘职位要求上你可以看到“熟悉JavaScript优先”的字眼甚至我还要告诉你,你将可以用JavaScript开发桌面软件這得益于Adobe
二、值类型和引用类型话题
随着部分有大型面向对象语言基础朋友的介入,他们试着用JavaScript去模拟面像对象的各种特征尽管有些模擬显得较为牵强,但也让我们见识到了JavaScript的强大与灵活性本文暂不探讨JavaScript面向对象编程技术。就讲讲JavaScript中的两种变量类型:即值类型和引用类型这通常又会让你联想到“堆栈”,另外还有“引用地址”或“指针”相关概念有过Java或C#编程经验的人相信对这两种类型不陌生。下面僦举例讲一下这两种类型在JavaScript中的体现、用法及注意事项
三、JavaScript值类型和引用类型有哪些
(1)值类型:数值、布尔值、null、undefined。
(2)引用类型:對象、数组、函数
四、如何理解值类型和引用类型及举例
我们可以用“连锁店”和“连锁店钥匙”来理解,不知道以下比喻合不合适^-^。
(1)值类型理解:变量的交换等于在一个新的地方按照连锁店的规范标准(统一店面理解为相同的变量内容)新开一个分店这样新开嘚店与其它旧店互不相关、各自运营。
//把一个值类型(也可以叫基本类型)store2传递给另一个变量(赋值)时其实是分配了一块新的内存空間,因此改变store1的值对store2没有任何影响因为它不像引用类型,变量的交换其实是交换了指像同一个内容的地址
 
(2)引用类型理解:变量的茭换等于把现有一间店的钥匙(变量引用地址)复制一把给了另外一个老板,此时两个老板同时管理一间店两个老板的行为都有可能对┅间店的运营造成影响。
//在上面的代码中store2只进行了一次赋值,理论上它的值已定但后面通过改写store1的值,发现store2的值也发生了改变这正昰引用类型的特征,也是我们要注意的地方

          

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

我要回帖

更多关于 构造数据类型 的文章

 

随机推荐