饥人谷作业---JS 里的数据类型

简单来说,js里面有七大数据类型,也就是number,string,boolean,symbol,null,undefined,object,在这七类中,前六类我们一般称为简单类型,而最后一类(object),我们称为复杂类型。

众所周知,js由Branden Eich发明,这位兄弟在设计js时,由于本人比较擅长scheme,所以当老板告诉他要写的跟Java语法类似,他的心态崩了。老兄花了十天时间就设计完了js,因此,存在许多逻辑上的bug,毕竟时间很短嘛,可以理解。接下来让我们对七大类型进行逐个研究和探讨:

1.Number

JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。根据国际标准 IEEE 754,JavaScript 浮点数的64个二进制位,从最左边开始,是这样组成的。

    第1位:符号位,0表示正数,1表示负数

    第2位到第12位(共11位):指数部分

    第13位到第64位(共52位):小数部分(即有效数字)

符号位决定了一个数的正负,指数部分决定了数值的大小,小数部分决定了数值的精度。

指数部分一共有11个二进制位,因此大小范围就是0到2047。IEEE 754 规定,如果指数部分的值在0到2047之间(不含两个端点),那么有效数字的第一位默认总是1,不保存在64位浮点数之中。也就是说,有效数字这时总是1.xx...xx的形式,其中xx..xx的部分保存在64位浮点数之中,最长可能为52位。因此,JavaScript 提供的有效数字最长为53个二进制位。

由于JavaScript的创立时候,Unicode编码还没有大行其道,于是,js有自己的一套运行体系,这就造成了小数运算会出现一定的问题。所以涉及到小数的时候,要特别小心,最好先化为整数。

js中表示数的方法很多:比如   0.1 可以写成 (.1),科学计数法表达时我们一般写成(2.1e2),他就等于210

二进制的表述方法:0b110(6)   十六进制0x11(17)   八进制011(9)

特别注意因为八进制以0开头的,所以保存电话号码的时候,最好要字符串"0575-74933445"

2.String

字符串就是()零个或多个排在一起的字符,放在单引号或双引号之中。(这两种都可以"abc" === 'abc')

那么我们遇到一些("  ,   ')这些符号时怎么办?我们可以采用转义符来解决。


饥人谷作业---JS 里的数据类型_第1张图片
如图

如果要用上转义符号自己呢?那就两次转义呗(\\)

字符串中,有时需要换行来写,总共有三种方法:

1.var a = "acs\

cscs"

2.var a = "acs" + 

"cscs"   (这种是我们推荐的)

3.var a = `acs

cscs`

3.Boolean

boolean的发明者是George Boole,这位兄弟的故事比较奇葩,有兴趣点这里George Boole

boolean类型比较少,只有两种,true 和 false

在表示这两种逻辑方式的时候,下列运算符会返回布尔值:

两元逻辑运算符: && (And),|| (Or)

前置逻辑运算符: ! (Not)

相等运算符:===,!==,==,!=

比较运算符:>,>=,<,<=

如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值

转换规则是除了下面六个值被转为false,其他值都视为true。

1.undefined    2.null  3.false    4.  0    5.NaN    6.""或''(空字符串)

4.Symbol(这个是ES6新增的,暂时不涉及)

5.null    6.undefined

这两位兄弟是js特色,其他都只有一个null

一般来说,对这二位有如下规定:

1.如果一个变量没有赋值 ---- undefined

2.如果有一个对象,但是我们目前不想赋值 ----- null

如果是一个非对象,那我们用 ----- undefined

7.Object

对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。

我们一般如此定义一个对象

饥人谷作业---JS 里的数据类型_第2张图片

特别说明,function和array也是对象的一种,他们是特殊的对象

有趣的是,每个我们定义的变量,自身会携带一个 __proto__ 属性指向 Object.prototype ,他叫做对象的原型,这个我们下次再说

有一点要记住,简单类型在内存中的存储都是键值对的形式存储的,而复杂类型存的键值对是一个地址,他指向堆内存的某个对象。我们可以把简单类型和复杂类型区分为士兵和兵团的区别,假设var a 是一个战场,我们可以派一个士兵(number),一辆坦克(string),一架飞机(Boolean),但是我们对于军团,则必须把军团打包成一个团,我们必须给他一个番号,然后把他部署在那里。js也是一样,遇到比较多的number,string这些的时候,就把他们打包成一个团,然后给这团一个番号(坐标),然后才能赋值

对对象中是否存在某元素 ,我们可以使用语法  "xxx" in object

将某个元素从对象中删去,我们可以用语法delete,用for(var key in Object) 来遍历数组


对这七大类型。我们可以用typeof函数来检验元素

特别值得注意的是 typeof null 的值为object,而typeof function 的值为function

你可能感兴趣的:(饥人谷作业---JS 里的数据类型)