| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> JavaScript权威指南阅读总结 - 2021/7/9 -> 正文阅读 |
|
[JavaScript知识库]JavaScript权威指南阅读总结 - 2021/7/9 |
前言????????2021年5月找到了一家公司实习,离实习上班还有两个多月的时间,就给了我们一个任务:阅读犀牛书(《JavaScript权威指南》第七版)和红宝书(《JavaScript高级程序设计》第四版)。这两本书,在很久之前就听说过,但由于各种各样的原因没有去阅读这两本书,现在刚刚好有机会拜读这两本书,就利用这段时间好好看这两本书。 技术总结????????以下是阅读JavaScript权威指南的归纳和总结,根据书本的章节来分点,主要是简单描述这一章节的内容,摘取重要的知识点,以及自己以前掌握不够牢固的部分。 第一章:JavaScript简介????????这一章节简单介绍了一下JavaScript这门语言特点,举了个简单的例子,以及每个章节的内容介绍。 第二章:词法结构????????主要内容是文本、注释、字面量、标识符、保留字、Unicode和可选分号。 ????????文本:JavaScript区分大小写 ? ? ? ? 注释:// 单行注释? ? /*多行注释*/ ? ? ? ? 字面量:数值,字符串,布尔值,对象和数组 ? ? ? ? 标识符:用来存储某个变量的引用 ????????保留字:JavaScript自身使用的标识符 ? ? ? ? *Unicode:目前比较常用的编码格式,当程序源代码存在两种以上不同编码的字符时,最好要先进行归一化,如Unicode归一化。JavaScript默认源代码是归一化后的。 ? ? ? ? *可选分号:JavaScript代码行尾的;一般是可写可不写的,但特殊位置是要写的,因为JavaScript在解析时遇到无法识别为一行语句的时候会默认加“;”当一行跟下面一行代码是否为一行有歧义时一定要加“;”,还有涉及到return、throw、yield、break和continue和++、--以及箭头函数时。 第三章:类型、值和变量讲解基本类型(少了数组和对象) ????????数值: ? ? ? ? ? ? ? ? 基本使用: ????????????????使用的是IEE 754的64位浮点数标准,可以分为整数和浮点数两类。二进制,八进制和十六进制分别使用0b、0o和0x前缀,如0xff。也可以使用科学计数法,数值后面e(或E)后面的数字为指数,如100 = 1.0e2。es6新特性可以加分隔符,如1_000。 ? ? ? ? ? ? ? ? 算术:除了基本的+-*/%外,js还提供了很多的算术函数,都被封装到了Math类里面,具体函数如下:
ES6还新增了一些函数,具体可以看书本28页。 ? ? ? ? ????????数值还有两个特殊标识符,Infinity和NaN。Infinity表示无穷,正为无穷大,负为无穷小。NaN表示非数字的意思。 ????????????????注意:浮点计算会有精度损失,如0.3-0.2 != 0.2- 0.1,这在其他高级语言也是一样的,原因是IEE754 浮点格式,涉及到计算机数据存储的底层原理。NaN不等于它自身,也就是说我们可以用a == a判断a是否为NaN。 ????????文本:文本大多数用赋值字符串。“”、‘’和``可以相互嵌套使用。这个特性在需要字符串包含“‘`时特别好用。”和’基本用法一样,比较特殊的是``,这个叫模板字面量,在里面使用${}可以获取到该上下文的变量。`还可以作为标签化模板字面量。 ? ? ? ? ? ? ? ?字符串本身有大量的api供我们去使用:
? ? ? ? 布尔值:除了true和false,JavaScript的任何值都能被转化为布尔值。undefined,null,-0,+0,NaN,‘’(空字符串)这些都是假性值,在需要布尔值的地方会转化为false,除了这几个外其他所有值都是真性值,即需要布尔值的地方会转化为true。 ? ? ? ? null与undefined:这个两个值区别不大,在开发中一般,只使用一种用来表示值不存在。如果一个变量只定义未赋值,它的值为undefined。 ? ? ? ? *符号:符号其实一个不会重复的变量引用,即使创建符号时使用的参数是同一个,返回的符号也是不一样的。 ? ? ? ? 全局对象:全局对象是只JavaScript执行时最顶层的环境,全局变量和全局函数都是存储在这个全局变量中的。 ? ? ? ? 类型转换:基本类型型之间的相互转换都有一定的规制,对象转换相对特殊,在需要数值的地方会调用自身的valueOf方法,如果是字符串就调用toString方法 ? ? ? ? 变量声明:在非严格模式下,有三种定义方法。一是使用var关键字,这个定义的变量会提升作用域,提升到函数作用域。第二种方法是使用let关键字,这个关键字是ES6新增语法,是修复之前语法缺陷的,他具有块级作用域不会提升变量的的作用域。第三种方法是不用关键字直接赋值,这样会定义一个全局变量。在严格模式下,只能用var和let关键字定义变量,且在有一些地方,表现也不一样。PS:常量的定义是使用const。 ? ? ? ? *解构赋值:解构赋值是一个非常强大的功能,只要赋值表达式左右有相应的结构,就能进行拆解赋值。 第四章:表达式与操作符? ? ? ? 表达式基本分为函数定义表达式,属性访问表达式,调用表达式,和创建表达式 ????????函数表达式:使用关键字function,例如:function test(){.....}。或者使用箭头函数,例如() => {} ? ? ? ? 属性访问表达式:有两种访问方式,一位object.变量名,二位object[变量名] ? ? ? ? 调用表达式:函数就直接test(),如果是某个对象的方法,就object.test()。调用有个特殊语法,叫条件式调用,语法为object?.test(),这个主要是预防object是null或undefined导致程序报错,如果对象为null或undefined,这个调用的返回值为undefined。 ? ? ? ? 操作符:操作符有算术操作符,逻辑操作符,赋值操作符,它们之间有优先级,在运行区间会根据它们之间的优先级,绝对它们的运算顺序。特殊操作符:eval,?:, ??, typeof,?delete,await,void。这些操作符都有他们各自的作用。 第五章:语句????????语句与大多数编程语言相同,都是使用顺序,分支,循环结构。 ????????条件语句最基本的是if(true){....}?else?if (true){....}else{.....},其余还有switch语言,配合case和break使用。 ????????循环最主要的用法就是for(let i = 0;i < n;i++),除了这个for循环,还可以使用多种迭代器,如forEach, for of ,for in等。 第六章:对象????????JavaScript对象的原理是原型链继承,虽然ES6语法新出了class等语法,但是它们的底层原理是一样的。下面是我在网上找到的一张图: ? ? ? ? 需要注意的事prototype是函数特有的一个属性,它指向自己的原型空间,因此可以判断prototype来确定一个变量是否为函数。创建对象使用new关键字,ES5语法使用new一个函数对象来创建一个对象。在ES6语法中,就可以使用class关键字来定义一个类了。 ? ? ? ? 在继承方面,ES5中,可以使用Object.create(o)来创建一个对象,这个对象继承o。也可以显示的指定o1._porto_ = o2.prototype继承另一个对象。ES6语法支持在创建类字面量的时候,使用extend关键字去继承一个对象。 第七章:数组? ? ? ? 创建一个数组可以使用数组字面量、Array()构造函数、Array.of()、Array.form()创建一个数组。 ? ? ? ? 稀疏数组:稀疏数组就是数组元素下标不连续的数组,它的length属性也大于自身元素的个数。 ? ? ? ? 数组方法:forEach,map,fitlter,find,findInde,every,some,reduce,flat,flatMap ? ? ? ? 数组实现栈队列操作:push,pop.shift,unshift ? ? ? ? 数组排序:sort,第一个参数可选,是一个函数,返回布尔值,根据布尔值进行排序。 第八章:函数????????函数不管在哪里定义都会被提升到顶部声明,所以我们可以在声明前面使用函数。这个是因为,JavaScript在执行前会先扫描一边程序,将函数和有些变量提升到顶部。 ? ? ? ? *拓展操作符:在函数表达式中参数列表使用,会讲剩余的参数全部收集到一个数组里面。如果是在函数调用中, 第九章:类????????在JavaScript中类指的是class定义的类字面量。利用类可以创建一个新对象,这是ES6语法新增的内容,因为JavaScript本身的一些缺陷,我们在使用对象做继承等操作时有些麻烦,这个语法就是用来解决这些问题的,使JavaScript面向对象编程更加自然、方便。 ? ? ? ? 构造函数:constructor,在类字面量中定义这个函数,new的时候会自动调用这个函数去初始化对象,如果自己不显式定义构造函数,系统会隐式定义一个默认的构造函数。 ? ? ? ? 私有字段:类字面量中的字段前面加个#,会使这个字段变成私有的,私有的字段只有,自生派生的对象才有权限去使用。要注意的是私有字段要先声明,才能在构造函数使用。 ????????相比java,python这些高级语言,JavaScript的类语法不够完善,但是语法标准一直在进步,相信将来,JavaScript的面向对象编程会变得更好。 第十章:模块? ? ? ? 闭包:如果直接引入其他的第三方库,与自己的代码在同样的环境下运行,全局变量很容易被污染,导致一些难以修复的问题,很难排查问题在哪里。为了解决这种问题大佬们研究除了闭包这个方法,闭包就是利用函数作用域和立即执行函数的特点实现的。将所有的代码都放在一个匿名函数里面,用立即执行函数包裹住,使这个函数在script文件被引入的时候立即执行。 ????????模块:模块的基本原理就是闭包,在早期JavaScript标准还没有模块这个说法,先是webpack、node等工具实现了模块化,后面官方才实现模块化。官方语法主要是使用export和import关键字来导出导入模块。 第十一章:JavaScript标准库? ? ? ? 集合Set:集合和数组类似,但与数组的不同的是,集合的元素是唯一的,集合的值不允许重复,也没有顺序和索引。 ? ? ? ? 键值对Map:Map是键去到值的索引,一般情况下,查询速度很快。是牺牲了空间换取时间的策略。 ? ? ? ? 定型数组:定型数组使JavaScript的语法有点像强类型语言 ????????正则表达式:可以说用于匹配字符串的小型编程语言,正则表达式对文本有强大的模式匹配和搜索替换功能。 感受????????写这个总结的时候的时间是2021年7月9日,由于这段时间还在学校,还有很多事情要弄,如期末考试、期末作业和实训作业等,结果阅读进度特别慢,《JavaScript权威指南》只阅读完11章节,《JavaScript高级程序设计》还没有去看。虽然《JavaScript权威指南》只阅读了一半左右的内容,但是收获良多,后悔没早点去看这本书。这本书讲的内容不是很高级,但是非常系统,内容很细,非常的基础。特别推荐初学者或者刚转JavaScript语言的开发者去阅读这本书,这本书把JavaScript分成17个章节来讲,每个章节的内容跟重点都不一样。我之前学习的习惯是看视频,然后要用什么就去百度,虽然这样学得很快,但是也导致自己学到的技术点是很零散的,看了这本书很好的补了我自己的短板,系统学习了JavaScript,补充了很多的知识点,对JavaScript有了更深的了解。 |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/28 11:50:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |