给萌新HTML5 入门指南(二)
本文由葡萄城技术团队原创并首发
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
上一篇我们已经为大家介绍了HTML5新增的内容和基础页面布局,这篇会继续向大家介绍广义上HTML5中另一个组成部分:JavaScript数据类型。
JavaScript作为一种弱类型语言,最大的特点就是动态类型。也就是说不用提前声明变量的类型,在程序运行时,类型会被动态的确定,并且在执行过程中可以动态的修改变量的类型。同时不同类型变量在运算时会自动进行隐式的类型转换。以下是一些常见的隐式转换示例:
var foo = 2020; // typeof foo -> "number"
var foo = "SpreadJS" // typeof foo -> "string"
var foo = true + 1; // foo = 2 typeof foo -> " number"
var foo = true + false; // foo = 1 typeof foo -> " number"
var foo = '5' - '2'; // foo = 3 typeof foo -> " number"
var foo = 20 + 20 + "SpreadJS" // foo = "40SpreadJS" typeof foo -> "string"
var foo = "SpreadJS" + 20 + 20 // foo = "40SpreadJS" typeof foo -> " string"
依据最新的 ECMAScript 标准将数据类型定义了 8 种:
其中为原始类型:Boolean、Null、Undefined、Number、BigInt、String、Symbol 和对象类型:object
关于原始类型需要知道的几个知识点:
- 原始类型的值是按值访问的
即在赋值和修改值时是通过值传递的方式来完成的,对变量赋值或者修改值会在内存中重新分配空间。
例如:
var a, b, x, y;
a = " SpreadJS";
b = " GrapeCity";
x = a;
y = b;
console.log(a, b, x, y); // result: SpreadJS GrapeCity SpreadJS GrapeCity
a和x, b和y之间赋值是完全独立的拷贝,互不干涉,如果我们将其中任何一个变量的值重新改变,其他相同值的变量也不会受到任何影响。
- 严格相等===和非严格相等==
对于原始类型,==只进行值比较,如果是不同类型则会在转换后再比较,===则会比较数据类型。
例如:
undefined === null //fasle
undefined == null //true
true === 1 //fasle
true == 1 //true
null == 0 //false
- Null 和 Undefined
null和undefined在使用中几乎没有区别,在使用非严格相等比较时结果也为true,它们的区别就是在于进行数值转换时它们的字面意义不同,undefined代表未定义,转为数值为NaN,而null为空、转为数值时为0。
例如:
Number(undefined) //NaN
Number(null) //0
1 + undefined //NaN
1 + null //1
虽然两者差别不大,并不会严格按照上面的区分去使用,但在实际项目应用中,对于空值的判断两者则都需要考虑。
- NaN
NaN 即 Not a Number ,表示了非数字类型,任何和NaN的操作返回值都是NaN,NaN不等于NaN。其中有一个全局方法 isNaN(),它的作用是检查一个值是否能被 Number() 成功转换。 如果能转换成功,就返回 false,否则返回 true 。
例如:
NaN == NaN; // fasle
isNaN('123') // false 能转换
isNaN('abc') // true 不能转换
- 浮点数精度误差
在JavaScript中,整数和浮点数都属Number数据类型,所有数字都是以64位浮点数形式存储的,也就是说JavaScript底层没有整数,1和1.0是相同的。
下面举几个例子来说明:
// 加法
0.1 + 0.2 = 0.30000000000000004
0.1 + 0.7 = 0.7999999999999999
0.2 + 0.4 = 0.6000000000000001 // 减法
0.3 - 0.2 = 0.09999999999999998
1.5 - 1.2 = 0.30000000000000004 // 乘法
0.8 * 3 = 2.4000000000000004
19.9 * 100 = 1989.9999999999998 // 除法
0.3 / 0.1 = 2.9999999999999996
0.69 / 10 = 0.06899999999999999 // 比较
0.1 + 0.2 === 0.3 // false
(0.3 - 0.2) === (0.2 - 0.1) // false
类似这样看起来不会算错的问题,在某些系统尤其是涉及财务的系统中会是一个严重的问题,这里就不展开解释发生误差的原因了,大家可自行研究,我们这只对解决方案简单的列一下,1. 可以通过引用类似Math.js、decimal.js、big.js这样的类库。2.对于对数字精度要求不高的系统,可以格式化并保留x位小数来处理。3. 计算时,将小数部分和整数部分分开计算再合并,等。
关于引用类型需要知道的几个知识点:
- 引用类型的值是按引用访问的
在操作对象时,实际上是在操作对象的引用而不是实际的对象。给变量赋值改变的是对象的引用关系。
例如:
var obj1 = {a:1};
var obj2 = obj1;
obj1.a = 2;
console.log(obj2.a) // result: 2.obj1和obj2为同一对象
obj1 = {a:3};
console.log(obj2.a) // result: 2.obj1指向新对象,obj2不变
- 引用类型===和==意义相同都为引用的比较
即是否为同一对象,各类型之间的非严格相等==比较类型转换可参考下表
|
|||||||
Undefined |
Null |
Number |
String |
Boolean |
Object |
||
被比较值 A |
Undefined |
true |
true |
false |
false |
false |
IsFalsy(B) |
Null |
true |
true |
false |
false |
false |
IsFalsy(B) |
|
Number |
false |
false |
A === B |
A === |
A=== |
A== |
|
String |
false |
false |
ToNumber(A) |
A === B |
ToNumber(A) |
ToPrimitive(B) |
|
Boolean |
false |
false |
ToNumber(A) |
ToNumber(A) |
A === B |
ToNumber(A) == |
|
Object |
false |
false |
ToPrimitive(A) |
ToPrimitive(A) |
ToPrimitive(A) |
A === B |
类型检测
JavaScript中类型检测方法有很多,有例如:typeof、instanceof、Object.prototype.toString、constructor、duck type这几种。
虽然方法很多,但判断思路就是两种:1根据数据类型判断 2 根据构造函数判断。
typeof
typeof可以判断数据类型,依据之前的介绍,javascript变量类型分为值类型和引用类型,typeof应用场景只可以区分值类型的数据类型,例如:
typeof 42 // "number"
typeof {} // "object"
typeof undefined // " undefined"
instanceof
和typeof一样,instanceof用于判断引用类型的数据类型。
例子:
(function(){}) instanceof Function
其他的还有Object.prototype.toString、constructor、duck type,在这就不一一介绍。
在了解了JavaScript的基础数据类型知识后,后面我们会继续为大家借着介绍CSS相关的内容。
给萌新HTML5 入门指南(二)的更多相关文章
- 给萌新HTML5 入门指南
本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. HTML5的发展改变了互联网技术趋势,前端热度依旧不减,所以对于应用开发人员 ...
- HTML5入门指南
1.HTML5到底是什么? HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定.目标是取代1999年所制定的HTML 4.01和XHTML 1.0标准,以期能在互联 ...
- require.js入门指南(二)
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- kotlin 语言入门指南(二)--代码风格
语言风格 这里整理了 kotlin 惯用的代码风格,如果你有喜爱的代码风格,可以在 github 上给 kotlin 提 pull request . 创建DTOs(POJSs/POCOs) 文件: ...
- GC入门指南(二)------GC工作原理
本系列博客旨在帮助大家理解java垃圾收集器及其工作原理,这是系列的第二篇. java垃圾回收事实上是由一个能够进行自己主动内存管理的进程完毕的,这使得程序猿在写代码的时候不必过多考虑内存释放与回收的 ...
- 萌新java入门笔记
首先声明以下内容只是散乱笔记,如果有误还望大侠指出!不胜感激! 基本数据类型: 大体和C语言类似: boolean truth = true;//逻辑型 //文字型 char c; String st ...
- 《转载》编程入门指南 v1.4
编程入门指南 v1.4 Badger · 8 个月前 作者:@萧井陌, @Badger 自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 CoCode ...
- HTML5 Plus移动App(5+App)开发入门指南
HTML5 Plus移动App,简称5+App,是一种基于HTML.JS.CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任意调用手机的原生能力,实现与原生App同样强大的功能和 ...
- HTML5入门以及新标签
HTML5 学习总结(一)--HTML5入门与新增标签 目录 一.HTML5概要 1.1.为什么需要HTML5 1.2.什么是HTML5 1.3.HTML5现状及浏览器支持 1.4.HTML5特性 ...
随机推荐
- dhtmlxGantt独立安装的系统要求
dhtmlxGantt库提供了使用导出作为在线服务从甘特图导出和导入数据的可能性. 您还可以通过在计算机上安装导出服务来本地导出甘特图.您需要确保系统满足系统要求才能使用导出模块: PNG / PDF ...
- NN相关资源(持续更新)
Iris数据介绍 http://www.cnblogs.com/Belter/p/8831216.html
- 剑指offer-链表&数组
1.圆圈中最后剩下的数 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈. ...
- Vue.js 学习笔记之三:与服务器的数据交互
显而易见的,之前的02_toDoList存在着一个很致命的缺陷.那就是它的数据只存在于浏览器端,一但用户关闭或重新载入页面,他之前加入到程序中的数据就会全部丢失,一切又恢复到程序的初始状态.要想解决这 ...
- 制作u盘启动盘
制作u盘启动盘 如果是想要制作 windows 系统启动盘,windows 官网提供途径,这里不在赘述. 以下讨论制作 centos 系统启动盘,需要 centos 系统文件,开源,可从官网下载得到. ...
- 《VC++ 深入详解》 第3版 这是盗版书么~。。。
<VC++ 深入详解> 第3版 www.broadview.com.cn 书读到一小半,发现书重复了一部分,缺失一部分.... 难受~ 比较难继续下去了 有一样的小伙伴么~ <VC+ ...
- 如何确定芯片pin1的位置
来源:https://www.raviyp.com/embedded/150-identifying-pin-no-1-on-an-ic Identifying pin no 1 on an IC R ...
- 《C++primerplus》第12章练习题
做一下倒数两题,都是在队列模拟的程序基础上做点修改测试. 5.找出平均等候时间为1分钟时,每小时到达的客户数为多少(试验时间不少于100小时). 指定队伍最大长度10人,模拟100小时.粗略估计答案在 ...
- vue使用vueCropper裁剪功能,代码复制直接使用
//先安装包 npm install vue-cropper --save-dev <template> <div id="merchantInformation" ...
- day63:Linux:nginx基础知识&nginx基础模块
目录 1.nginx基础知识 1.1 什么是nginx 1.2 nginx应用场景 1.3 nginx组成结构 1.4 nginx安装部署 1.5 nginx目录结构 1.6 nginx配置文件 1. ...