1. 数据类型

在js中有7中数据类型

其中6种是基本类型 包括 null, undefined, boolean, number, string和symbol,还有一种是引用类型object

但是判断数据类型的时候除了null以外都可以用typeof

1. null

null应该如何判断呢,应该是这样的

typeof a === 'object' && !a

2) undefined

undefined判断可以用typeof,

有一个有趣的现象,很少有人关注未声明吧,事实上未声明 (undeclared) 和声明但未定义 (undefined) 是两种不同的现象,

但是在js中比较坑的是undeclared和undefined的是一样的,所以并不能知道变量的声明与否

比较幸运的一点是如果一个变量未声明就拿来用会导致严格模式下的报错而判断一个undeclared的变量却可以防止报错

比如要表示加入a未声明就声明一个a可以写作

2. 数组和类数组

1. 类数组指的是一类对象,他们可迭代,拥有数值作为属性,最重要的一点是他们拥有length属性,所以字符串也是一个类数组。

2. js数组的判断也不能用typeof但是对于对象有一个新的判别方法 instanceof

3. 数组是一种对象所以可以写作 a['foo'] = 'bar'也可以,但是却不能增加他的length, 但是比较有趣的一点是 a["13"] = "for", 却会导致length变成14,虽然传入的13是一个数值

4. 类数组转化数组可以用

 Array.from( fakeArr ) 

也可以

Array.prototype.slice.call( fakeArr )

Array.from是一个相当强大的东西,而slice是一个比较有趣的实现。

5. 借用数组的方法是一件很好玩的事情,在js里边数组拥有超级有钱的主,有很多实用的工具,字符串就很穷了,所以字符串可以和数组借用噢,怎么借用呢,就像上边的call那个样子咯。

3. 数值

数值的相关知识比较冷门,但也蛮有意思的

1. 一直被人诟病的一定是js中没有真正的整数,很经典的一个是

 0.2 + 0.1 = 0.30000000000000004

就是因为js内部存储并不是整型,浮点数这样区分的,

2. 用e来表示数值是一个很不常见的做法,估计也只是因为计算器显示不够才会那么表示,js中也是可以的噢,比如3.04e3就等于3040

3. 数值比较有趣的一点是42.toFixed(3)是一种错误的语法,居然是因为42后边的点被当成小数点解析了因为42.也是一个正确的表达方式,所以42..toFixed(3)是没毛病的

4. 16进制的数值是在前边加 0x 而8进制的数值是在前边加上0

5. NaN并不是说数据不是一个数值,更贴切的说是一个坏死的数值,比如 2/ 'a' 就是一个坏死的数值。但是

typeof /'a' === ‘number' // true

同时js中有一个全局的函数 isNaN,

'a' === NaN // false
isNaN('a') // true

6. +0 和 -0 在js中从数值上说一样,但是从向量的角度是不一样的。

7. ES6的新方法Object.is

Object.is(/ 'a',  NaN) // true

 

4. 值和引用

在老生常谈的引用类型和基本类型中也有一些很多人并不清晰的地方

1. 在js中是没有指针这个概念的,而且js中并没有变量之间互相引用,只有可能是一个值被10个变量引用,但是他们互相是没有关系的

2. 基本类型的复制是通过所引用的值的赋值,而引用类型是通过复制引用本身,而不是相互引用。所以会又下边这种现象。

var a = [, , ];
var b = a;
b.push() // 1, 2, 3, 4
b // [1, 2, 3, 4];
a // [1, 2, 3, 4]; b = [, , , ];
b.push()
b // [1, 2, 3, 4, 5];
a // [1, 2, 3, 4];

上边的代码表示当 b 换了一个引用的值之后和 a 就没什么关系了,所以在变动之后 a 并不会发生变化

你不知道的javascript -- 数据类型的更多相关文章

  1. 十分钟快速了解《你不知道的 JavaScript》(上卷)

    最近刚刚看完了<你不知道的 JavaScript>上卷,对 JavaScript 有了更进一步的了解. <你不知道的 JavaScript>上卷由两部分组成,第一部分是< ...

  2. 《你不知道的JavaScript》整理(二)——this

    最近在读一本进阶的JavaScript的书<你不知道的JavaScript(上卷)>,这次研究了一下“this”. 当一个函数被调用时,会创建一个活动记录(执行上下文). 这个记录会包含函 ...

  3. 《你不知道的JavaScript》整理(一)——作用域、提升与闭包

    最近在读一本进阶的JavaScript的书<你不知道的JavaScript(上卷)>,里面分析了很多基础性的概念. 可以更全面深入的理解JavaScript深层面的知识点. 一.函数作用域 ...

  4. Javascript:Javascript数据类型详解

    要成为一个优秀的前端工程师,系统的学习Javascript,有夯实的Javascript基础,以及对语言本身的深刻的理解,是基本功.从Javascript数据类型开始,我将对Javascript知识体 ...

  5. 你不知道的Javascript(上卷)读书笔记之一 ---- 作用域

    你不知道的Javascript(上卷)这本书在我看来是一本还不错的书籍,这本书用比较简洁的语言来描述Js的那些"坑",在这里写一些博客记录一下笔记以便消化吸收. 1 编译原理 在此 ...

  6. JavaScript数据类型 typeof, null, 和 undefined

    JavaScript 数据类型 在 JavaScript 中有 5 种不同的数据类型: string number boolean object function 3 种对象类型: Object Da ...

  7. 网页、JavaScript 数据类型

    JavaScript 数据类型 一.基本数据类型: 字符串.数字.布尔.日期和时间 JavaScript 拥有动态类型 JavaScript 拥有动态类型.这意味着相同的变量可用作不同的类型: 1 v ...

  8. javascript数据类型、初始化

    Javascript数据类型有6种: 数值型数据类型(Number): 字符串(String): 布尔型数据(Boolean): 对象数据(Object): 空(Null): 未定义(Undefine ...

  9. 你不知道的JavaScript上卷笔记

    你不知道的JavaScript上卷笔记 前言 You don't know JavaScript是github上一个系列文章   初看到这一标题的时候,感觉怎么老外也搞标题党,用这种冲突性比较强的题目 ...

随机推荐

  1. mongodb 3.2 yaml 配置详解及范例

    mongodb3.x版本后就是要yaml语法格式的配置文件,下面是yaml配置文件格式如下:官方yaml配置文件选项参考:https://docs.mongodb.org/manual/ ... #c ...

  2. javascript特效源码(2、图像特效)

    1.不停闪烁的图像 不停闪烁的图片[修改显示的图片及链接地址后根据说明进行共1步] 1.以下代码放在一个新建页面的HTML的<body></body> 区即可:[页面上必须什么 ...

  3. Luogu P3802 小魔女帕琪(期望)

    P3802 小魔女帕琪 题意 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组 ...

  4. Entity Framework Code First 模式-建立多对多联系

    Entity Framework 在建立多对多的联系时,会生成一个中间表,用来表示这个多对多的关系.这和数据库设计时从概念模型到逻辑模型转化时,多对多的关系不能和任何一端的实体合并,需要将关系也转化为 ...

  5. lync sdk 二次开发

    1.关于 UI Suppression Mode http://blog.thoughtstuff.co.uk/2014/08/the-6-things-you-need-to-know-about- ...

  6. 性能分析神器VisualVM【转】

    性能分析神器VisualVM[转] Posted on 2015-04-17 09:37 WadeXu 阅读(5809) 评论(6) 编辑 收藏 VisualVM 是一款免费的,集成了多个 JDK 命 ...

  7. python+selenium中webdriver相关资源

    Chrome chrome的webdriver :  http://chromedriver.storage.googleapis.com/index.html chrome的webdriver需要对 ...

  8. 1.前端数据可视化插件:Highcharts、Echarts和D3(区别)

    前端数据可视化插件有很多,但我用过的只有Highcharts(https://www.hcharts.cn/).Echarts(http://echarts.baidu.com/)和D3(https: ...

  9. token方法可用于临时关闭令牌验证,

    token方法可用于临时关闭令牌验证,例如: $model->token(false)->create(); 即可在提交表单的时候临时关闭令牌验证(即使开启了TOKEN_ON参数). 大理 ...

  10. 容斥原理——状态压缩zoj3233 zoj2836升级版

    zoj2836就是裸的求lcm进行容斥,用dfs比较直观 zoj3233增加了一个集合b,lcm(b)的倍数是不符合条件的 那么在zoj2836的基础上,把lcm(x,lcm(b))造成的影响减去即可 ...