京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

萌新HTML5 入门指南(二)

2024-11-2 22:21| 发布者: 44f6fa4f5| 查看: 43| 评论: 0

摘要: [code]本文由葡萄城技术团队原创并首发[/code] 上一篇我们已经为各人介绍了HTML5新增的内容和基础页面布局,这篇会继承向各人介绍广义上HTML5中另一个构成部分:JavaScript数据范例。 JavaScript作为一种弱范例语言
[code]本文由葡萄城技术团队原创并首发[/code]

上一篇我们已经为各人介绍了HTML5新增的内容和基础页面布局,这篇会继承向各人介绍广义上HTML5中另一个构成部分:JavaScript数据范例。

JavaScript作为一种弱范例语言,最大的特点就是动态范例。也就是说不用提前声明变量的范例,在程序运行时,范例会被动态的确定,而且在实行过程中可以动态的修改变量的范例。同时不同范例变量在运算时会自动举行隐式的范例转换。以下是一些常见的隐式转换示例:

[code] 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"[/code]

依据最新的 ECMAScript 尺度将数据范例定义了 8 种:

此中为原始范例:Boolean、Null、Undefined、Number、BigInt、String、Symbol 和对象范例:object

关于原始范例必要知道的几个知识点:

  • 原始范例的值是按值访问的 

即在赋值和修改值时是通过值通报的方式来完成的,对变量赋值或者修改值会在内存中重新分配空间。

比方:

[code] var a, b, x, y; a = " SpreadJS"; b = " GrapeCity"; x = a; y = b; console.log(a, b, x, y);   // result:  SpreadJS GrapeCity SpreadJS GrapeCity[/code]

a和x, b和y之间赋值是完全独立的拷贝,互不干涉,如果我们将此中任何一个变量的值重新改变,其他相同值的变量也不会受到任何影响。

  • 严格相等===和非严格相等==

对于原始范例,==只举行值比力,如果是不同范例则会在转换后再比力,===则会比力数据范例。

比方:

[code] undefined === null //fasle undefined == null //true true === 1 //fasle true == 1 //true null == 0 //false[/code]
  • Null 和 Undefined

null和undefined在使用中几乎没有区别,在使用非严格相等比力时效果也为true,它们的区别就是在于举行数值转换时它们的字面意义不同,undefined代表未定义,转为数值为NaN,而null为空、转为数值时为0。

比方:

[code] Number(undefined)    //NaN Number(null)    //0 1 + undefined   //NaN 1 + null    //1[/code]

虽然两者差别不大,并不会严格按照上面的区分去使用,但在实际项目应用中,对于空值的判断两者则都必要考虑。

  • NaN

NaN 即 Not a Number ,表示了非数字范例,任何和NaN的操纵返回值都是NaN,NaN不等于NaN。此中有一个全局方法 isNaN(),它的作用是检查一个值是否能被 Number() 成功转换。 如果能转换成功,就返回 false,否则返回 true 。

比方:

[code] NaN == NaN;     // fasle isNaN('123')   // false 能转换 isNaN('abc')    // true 不能转换[/code]
  • 浮点数精度误差

在JavaScript中,整数和浮点数都属Number数据范例,所有数字都是以64位浮点数形式存储的,也就是说JavaScript底层没有整数,1和1.0是相同的。

下面举几个例子来说明:

[code] // 加法 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[/code]

雷同如许看起来不会算错的问题,在某些系统尤其是涉及财务的系统中会是一个严重的问题,这里就不睁开解释发生误差的缘故原由了,各人可自行研究,我们这只对解决方案简单的列一下,1. 可以通过引用雷同Math.js、decimal.js、big.js如许的类库。2.对于对数字精度要求不高的系统,可以格式化并保留x位小数来处理。3. 盘算时,将小数部分和整数部分分开盘算再归并,等。

关于引用范例必要知道的几个知识点:

  • 引用范例的值是按引用访问的

在操纵对象时,实际上是在操纵对象的引用而不是实际的对象。给变量赋值改变的是对象的引用关系。

比方:

[code] 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稳定[/code]
  • 引用范例===和==意义相同都为引用的比力

即是否为同一对象,各范例之间的非严格相等==比力范例转换可参考下表

被比力值 B

   

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 === ToNumber(B)

A=== ToNumber(B)

A== ToPrimitive(B)

String

false

false

ToNumber(A) === B

A === B

ToNumber(A) === ToNumber(B)

ToPrimitive(B) == A

Boolean

false

false

ToNumber(A) === B

ToNumber(A) === ToNumber(B)

A === B

ToNumber(A) == ToPrimitive(B)

Object

false

false

ToPrimitive(A) == B

ToPrimitive(A) == B

ToPrimitive(A) == ToNumber(B)

A === B

范例检测

JavaScript中范例检测方法有很多,有比方:typeof、instanceof、Object.prototype.toString、constructor、duck type这几种。

虽然方法很多,但判断思路就是两种:1根据数据范例判断 2 根据构造函数判断。

  • typeof

typeof可以判断数据范例,依据之前的介绍,javascript变量范例分为值范例和引用范例,typeof应用场景只可以区分值范例的数据范例,比方:

[code] typeof 42 // "number" typeof {} // "object" typeof undefined // " undefined"[/code]
  • instanceof

和typeof一样,instanceof用于判断引用范例的数据范例。

例子:

(function(){}) instanceof Function

其他的另有Object.prototype.toString、constructor、duck type,在这就不一一介绍。

在了解了JavaScript的基础数据范例知识后,后面我们会继承为各人借着介绍CSS相关的内容。

以上就是萌新HTML5 入门指南(二)的详细内容,更多关于萌新html5 入门的资料请关注脚本之家其它相关文章!


来源:https://www.jb51.net/html5/751505.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-7-2 02:19 , Processed in 0.031169 second(s), 18 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

返回顶部