您现在的位置是:首页 > 学无止境 > 其他网站首页其他 JavaScript之数据类型

JavaScript之数据类型

  • 莫愁
  • 其他
  • 2019-06-14
简介JavaScript是一门弱语言,不像C语言,用一个变量,还要先定义数据类型,定义成了int整型,就不能放字符串进去。但JavaScript定义的变量,就是你先放了数字进去,它就变成了数字类型,后面改放了字符串进去,也就变了字符串类型。所以,在进行一些运算的时候,虽然灵活,但也会出毛病,这也是它的弱点。
字数 3643.5

JavaScript是一门弱语言,不像C语言,用一个变量,还要先定义数据类型,定义成了int整型,就不能放字符串进去。但JavaScript定义的变量,就是你先放了数字进去,它就变成了数字类型,后面改放了字符串进去,也就变了字符串类型。所以,在进行一些运算的时候,虽然灵活,但也会出毛病,这也是它的弱点。

数据类型的种类

最新的ECMAScript定义了7种数据类型:

  1. Number  数值类型,不区分整数和浮点数。

  2. String   字符串类型。

  3. Boolean  布尔值类型,只有true和false。

  4. Object   对象(Function函数、内置的Date、Array、Math都是对象类型)。

  5. undefined   value值未定义。

  6. null   空的值。

  7. Symbol  (ES6新增,表示实例唯一且不可变的数据类型)

一、Number数字类型

如果都是1+1=2这样的运算,那么也简单多了,问题是,0.1+0.2 != 0.3是不是就有点看不懂了。

number数值类型包括所有的数字和一个NaN(not a number).

在js中数字取值的范围是 [-1.7976xxxxe308 ~ -5e-324, 0, 5e-324 ~ 1.7976xxxxe308]。

数字常用的表示形式有:

有一个Number()函数可以显性把其他类型的值转换成数字类型。

由此可见,Number是把( )里面的参数作为一个整体来转换,能够转成数字的就转,不能转成数字的就是NaN。

那如果遇到'200px'这样的值,需要获取200这个数字,就不能用Number()来硬转了,需要借用parseInt()来实现。

parseInt():从数据的左边开始,一个值一个值的转,直到不是数字为止。只能转出整数的数字类型。

如果是小数呢?就可以用parseFloat()。

parseFloat(): 从数据的左边开始,一个数字一个数字的转,认识一个小数点,但是遇到第二个小数点或别的符号就停止了。

小技巧:利用这两个函数可以判断一个数值是否是整数。

既然有显性转换,也就存在隐性转换。

通过一些运算符,把字符串转换成了数字类型。

还有累加累减,++ 、 -- 也能把字符串转换成数字。

还有>、<、==等比较运算符。

以及一个特殊的取反‘!’运算符,不管后面跟什么数据类型,都能转成布尔值。

需要注意的是number的精度问题,计算机存储是二进制,JS 遵循 IEEE 754 规范,采用双精度存储(double precision),占用 64 bit。

数据精度问题.png

  • 1位用来表示符号位

  • 11位用来表示指数

  • 52位表示尾数

所以,无穷尽的数字是放不完的,会导致精度丢失。

0.1+0.2=0.30000000000000004 ,所以不等于0.3.

这种问题可以考虑把浮点数乘以倍数变成整数,再除以倍数变回正确的值。

二、String字符串类型

字符串由零个或多个字符构成。字符包括字母、数字、标点符号和空格。字符串必须放在引号里——单引号和双引号都允许使用。

如果字符串包含双引号字符,就应该把整个字符串放在单引号中;如果字符串包含单引号字符,就应该把整个字符串放在双引号中。

字符串创建的时候直接把字符串赋值给变量即可。

可以使用‘+’进行字符串连结。

其实JavaScript有一个String字符串对象,但是我们不用 var string1 = new String("Hello")这种方式去创建字符串,JavaScript会自动帮助我们将字符串转换成字符串对象。

既然是对象,所以String提供了很多属性和方法给字符串使用。

最常见的就是length属性。

以及charAt()、indexOf()函数等。这些函数在后面专门讲对象的内容再细说。

三、Boolean布尔值类型

就只有true和false两个值。

if条件判断语言会自动执行Boolean的转换。

不同类型的数据都有对应的Boolean值。

数据类型 true false
Number 任何非零数值(包括无穷大) 0和NaN
String 任何非空字符串 ""空字符串(不是" "," "是包含空格的字符串)
Boolean true false
Object 非null的任何对象 null
Undefined undefined
 

四、Object对象类型

这是一个很复杂的类型,比如Function函数,Array数组都是常见的对象。

书上说的:对象就是一组数据和功能的集合。

对象根据环境,有本地对象( ECMAScript 实现提供的对象)、内置对象(Math)、宿主对象(DOM、BOM)。

具体可以查看w3school的官方文档:ECMAScript 对象类型

1、创建对象实例的两种基本方法

第一种是用new操作符后面跟上Object构造函数。

第二种是使用对象字面量的方法。对象字面量是对象定义的一种简写方式,目的在于简化创建包含大量属性的对象的过程。

属性是描述对象的数据,方法是对象的功能行为。比如一辆车,可以用颜色、重量等属性来描述车的状态,用发动、停止等动作来表示它的功能。

2、访问属性和方法

访问属性主要有“.”语法和[]两种。

访问方法就是在调用函数。

注意:虽然String、Number、Boolean的确是一种本地对象,但是我们最好不要用申明对象实例的方式去用它。

也就是说不要这样用:

而应该直接赋值给一个普通的变量:

因为定义为对象和定义成一个普通的变量,存放的内存方式不一样,销毁的方式也不一样,并且让代码复杂化和降低了执行速度。

 

五、undefined未定义

定义了一个变量,但是还没有赋值,则这个变量的值是undefined,数据类型也是undefined.

通过将值设为undefined,可以清空任何变量。

六、null

null表示空,“nothing”,但是它的数据类型是对象,所以可以表示一个空对象。

也可以通过设置为null来清空一个对象。

也可以设置为undefined来清空对象。

是不是觉得undefined和null很相似,没有啥区别。

可以简单粗暴的说null和undefined就是值相同但是数据类型不一样。

 

七、Symbol类型

是ES6新增的一种原始类型。

八、typeof运算符

JavaScript的数据类型分为两大类,一种是原始类型(primitive type),一种是复杂类型(complex type)。

原始类型指的是这种数据类型的值是单个简单的数据值,没有其他属性或方法。

所以,JavaScript有五个原始类型:Number、String、Boolean、Null、Undefined,现在新增了一个Symbol,就六个了。

复杂类型就是object、function这种。

用typeof运算符可以查看它们的数据类型:

按理说typeof null就应该返回null,结果返回的是object,object类型应该属于复杂类型,但是null又表示空对象,技术上还是属于原始类型,所以这个错误真的让人很晕。

typeof不能返回数组对象为array,但是可以返回function函数对象。

如果想精准的获取对象的类型时,可以使用Object.prototype.toString方法。

可以这样使用:

 


转载: 感谢您对莫愁个人博客网站平台的认可,非常欢迎各位朋友分享到个人站长或者朋友圈,但转载请说明文章出处“来源莫愁个人博客 https://www.mochoublog.com/study/256.html”。

文章评论

    • 评论
    人参与,条评论

技术在线

服务时间

周一至周日 12:00-22:00

关闭下雪
关闭背景特效