前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript编程精解(一)

JavaScript编程精解(一)

作者头像
硬核项目经理
发布2019-08-07 15:24:12
7040
发布2019-08-07 15:24:12
举报

一、值、类型和运算符

A.值

1.为了能够顺利操作非常多的位数据而又不引起数据丢失,我们可以将这些位划分成表示不同信息的块,在JS中,我们将这些数据块称为值。

2.6种基本的值类型:数字(number)、字符串(string)、布尔值(boolean)、对象(object)、函数(function)和未定义类型(undefined)

B.数字

1.在JS中实际 可存储的数字范围是1900万亿,可以使用带e(指数)的科学技术法,2.998e8=2.99800000

2.使用小数时精度不高

3.JS中三个特殊的值:Infinity、-Infinity和NaN,前两个表示无穷大和负无穷大,NaN表示“非数值”

C.一元运算符

1.使用两个值的运算符称为二元运算符,而使用一个值的则称为一元运算符。减号运算符即可用作一元运算符,也可用作二元运算符

D.未定义值

1.null和undefined,用于表示无意义的值。它们各自表示其自身含义,除些之外不包含任何信息。

E.自动类型转换

1.当有些值无法显式地转换成数字(比如“five”或undefined),就会产生NaN。请检查一下是否发生了错误的类型转换。

2.||当左侧值可以被转换成true时,会直接返回左侧的值,否则会返回右侧的值。所以这个符号的这种功能可用于返回默认值。

3.&&当左侧的值可以被转换成false时,&&运算符会返回左侧值,不由返回右侧值

4.短路计算:||和&&只有必要时才会计算右侧的表达式。

https://github.com/zhangyue0503/html5js/blob/master/eloquentjs/1.html

二、程序结构

A.变量

1.变量并不包含值,而是会引用这些值:两个不同的变量可以引用相同的值。

B.环境

我们将给定时间内的变量和变量值的集合称为环境。

https://github.com/zhangyue0503/html5js/blob/master/eloquentjs/2.html

三、函数

A.词法作用域

任何外部作用域都可以访问到包含它的臂部作用域的变量。函数内部变量的可见性取决于函数在代码当中的位置。在包含了一个函数定义的代码块中,这个函数可以访问到代码块中的所有变量,即函数上层的代码块中的变量和函数内部的变量。这种控制变量可见性的方法称为词法作用域(lexical scoping)

B.调用栈

每当函数调用时,当前 的上下文信息就会被存储在栈顶。而当函数返回时,系统会删除存储在栈顶的上下文信息,并使用该信息继续执行程序

C.闭包

一个包装了一些局部变量的函数是一个闭包。

D.递归

在标准的JS实现当中,递归写法的函数执行效率比循环写法的函数慢了大约10倍。执行简单的循环操作比多次函数调用效率要高很多。若程序处理的概念非常复杂,为了确保程序简单易懂,牺牲一定效率也的确是一种明智的选择。除非程序执行速度确实太慢,否则先不要关注效率问题。

E.函数及其副作用

相比于直接产生副作用的函数,产生返回值的函数则更容易集成到新的环境当中使用

https://github.com/zhangyue0503/html5js/blob/master/eloquentjs/3.html

四、数据结构:对象和数组

A.JS中两种最为常用的访问属性的方法:使用点(.)和方括号[]。如果使用点,则点之后的部分必须 是一个合法变量名,即直接写属性名称。如果使用方括号,则JS会将方括号中表达式的返回值作为属性名称。

B.可以使用in操作符来确定对象中是否包含特定名称的属性

https://github.com/zhangyue0503/html5js/blob/master/eloquentjs/4.html

五、高阶函数

A.高阶函数

1.如果一个函数操作其他函数,即将其他函数作为参数或将函数作为返回值,那么我们可以将其称为高阶函数。

B.map函数

Map方法可以对数组中的每个元素调用函数,然后利用返回值来构建一个新的数组,实现转换数组的操作。

https://github.com/zhangyue0503/html5js/blob/master/eloquentjs/5.html

六、深入理解对象

A.方法

在调用object.method()时,对象中的一个特殊变量this会指向当前方法所属的对象

B.原型

1.当开发人员访问一个对象不包含的属性时,就会从对象原型中搜索属性,接着是原型的原型,依此类推。空对象的原型是Object.prototype。

2.许多对象会提供自己通过特殊原型来提供对象自己的默认属性。函数继承自Function.prototype,数组继承自Array.prototype等。

3.Object.getPrototypeOf函数返回的结果是对象原型。可以利用一个特定的原型来使用Object.create方法创建对象

C.构造函数

1.在JS中,调用函数之前使用new则表示调用其构造函数

2.构造函数中包含了指向新对象的变量this,除非构造函数显式地返回了另一个对象的值,否则构造函数会返回这个新创建的对象

3.通过关键字new创建的对象称之为构造函数的实例

4.构造函数其实就是函数,因此其实际原型是Function.prototype,而构造函数的prototype属性则是其所创建的实例的原型,而非构造函数自身的原型

D.覆盖继承的属性

如果原型中存在同名属性,那么在调用该属性时,就不会再调用原型中的那个属性了,转而调用我们添加到对象中的属性。但原型本身不会被修改。

E.原型污染

1.可以使用Object.defineProperty函数定义自己的不可枚举属性,该函数允许我们在创建属性时控制属性类型

2.使用对象的hasOwnProperty方法确定自身是否包含某个属性而不会搜索原型。

F.无原型对象

可以使用Object.create(null)来创建

G.多态

H.Getter与Setter

I.继承

instanceof运算符会遍历所有继承类型

https://github.com/zhangyue0503/html5js/blob/master/eloquentjs/6.html

项目实战:构建电子生态系统

https://github.com/zhangyue0503/html5js/blob/master/eloquentjs/7.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-01-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农老张 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档