JS红宝书学习记录(一)
红宝书记录1-3
三个组成部分:ECMAScript,DOM,BOM
script标签属性:
1.外部脚本使用:src(URL)
- async 异步下载,不阻塞文档呈现。不保证顺序执行
- defer 延迟下载,文档完全呈现后才下载
2.type 类型即MIME:媒体类型(通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型 )是一种标准,用来表示文档、文件或字节流的性质和格式。它在IETF RFC 6838中进行了定义和标准化。常用text/javascript,其他很少用,看一下就行。
类型 | 描述 | 典型示例 |
---|---|---|
text
|
表明文件是普通文本,理论上是人类可读 |
text/plain , text/html , text/css, text/javascript
|
image
|
表明是某种图像。不包括视频,但是动态图(比如动态gif)也使用image类型 |
image/gif , image/png , image/jpeg , image/bmp , image/webp , image/x-icon , image/vnd.microsoft.icon
|
audio
|
表明是某种音频文件 |
audio/midi , audio/mpeg, audio/webm, audio/ogg, audio/wav
|
video
|
表明是某种视频文件 |
video/webm , video/ogg
|
application
|
表明是某种二进制数据 |
application/octet-stream , application/pkcs12 , application/vnd.mspowerpoint , application/xhtml+xml , application/xml , application/pdf
|
关于instanceof和typeof的区别:typeof可以直观的区别出数值类型,但是对于如数组、正则、日期、对象等的引用类型返回的都是Object。instance(实例);A instanceof B : A沿着proto这条线来找,同时B沿着prototype这条线来找,如果两条线能找到同一个引用,即同一个对象,那么就返回true。如果找到终点还未重合,则返回false。
六种类型外,这里记下es6新增的:
symbol:Symbol()创建(独一无二),Symbol().for()创建同一Symbol值。
定义对象属性时使用[],不能使用.进行访问,只能使用Obj.getOwnPropertySymbols()遍历;Reflect.ownKeys()返回所有属性(包括symbol)。
可用它定义内部私有属性或方法:
BigInt 不说,精度问题
ES3和ES5,解析八进制存在分歧!
关于数据类型转换问题:
下表展示了使用不同的数值转换为数字(Number), 字符串(String), 布尔值(Boolean):
原始值 | 转换为数字 | 转换为字符串 | 转换为布尔值 |
---|---|---|---|
false | 0 | “false” | false |
true | 1 | “true” | true |
0 | 0 | “0” | false |
1 | 1 | “1” | true |
“0” | 0 | “0” | true(字符串不为空) |
“000” | 0 | “000” | true |
“1” | 1 | “1” | true |
NaN | NaN | "NaN"(正常思路) | false |
Infinity | Infinity | “Infinity” | true(无穷大不为0,所以仍为true) |
-Infinity | -Infinity | “-Infinity” | true |
“” | 0 | “” | false |
“20” | 20 | “20” | true |
“Runoob” | NaN(包含了非数字的字符) | “Runoob” | true |
[ ] | 0 | “” | true(数组是对象) |
[20] | 20 | “20” | true |
[10,20] | NaN(数组长度大于1) | “10,20”(jion(’,’)拼接) | true |
[“Runoob”] | NaN(包含了非数字的字符) | “Runoob” | true |
[“Runoob”,“Google”] | NaN | “Runoob,Google” | true |
function(){} | NaN | "function(){}" | true |
{ } | NaN | "[object Object]" | true |
null | 0(空指针,定义过,赋值0) | “null” | false |
undefined | NaN(未定义的值) | “undefined” | false |
parseFloat和parseInt的区别在于①小数点②只能解析10进制
有意思的一点,argument的值永远和对应命名参数的值保持同步(但是内存空间独立)
function doAdd(num1,num2){arguments[1]=10;console.log(arguments[0]+num2)}
=>undefined
doAdd(0,0)
=>10
一个问题,看到这个行为之后习惯性的写下了箭头函数,然后就。。。
热爱学习的我们当然要打破砂锅问到底啦。
参考链接:https://blog.fundebug.com/2019/09/16/anomalies-in-javascript-arrow-functions/
平常开发中让我们觉得箭头函数他就是函数了,但其实,箭头函数也许可以把箭头函数看作是异常的 JS 函数。下面对比下差异
严格与非严格模式下,都不能有重复的命名参数
// 只要你敢写成重复的参数,我就敢死给你看 const logParams = (first, second, first) => {console.log(first, second); }
箭头函数没有arguments绑定,但是它可以访问最近的非箭头函数的arguments对象(!!这不就跟我们的箭头函数处于定义时的执行上下文环境一样的道理吗)
箭头函数永远不能用作构造函数,自然不能使用new关键字构造,也就没有prototype属性了。
在函数的整个生命周期中,箭头函数内部的值保持不变,并且总是与接近的非箭头父函数中的值绑定。
知道了既然箭头函数没有argument参数(有也是最近的非箭头函数的),那我们可以怎样做呢?
一种时在函数内部返回箭头函数,明显很傻;
另外就是es6 rest参数了
doAdd = (...args)=>{return args[0]+args[1]}
=>(...args)=>{return args[0]+args[1]}
doAdd(0,0)
=>0
arguments和rest的区别:
rest
参数与函数内部的arguments
对象不同。rest
参数是一个实际的函数参数,而arguments
对象是一个绑定到函数作用域的内部对象。- 一个函数只能有一个
rest
参数,而且它必须位于最后一个参数。这意味着函数可以包含命名参数和rest
参数的组合。 - rest 参数与命名参数一起使用时,它不包含所有传入的参数。但是,当它是惟一的函数参数时,表示函数参数。另一方面,函数的
arguments
对象总是捕获所有函数的参数。 rest
参数指向包含所有捕获函数参数的数组对象,而arguments
对象指向包含所有函数参数的类数组对象。
箭头函数最后一件事:
与常规函数不同,箭头函数没有this
的绑定。 this
的值将解析为最接近的非箭头父函数或全局对象的值。
与常规函数不同,内部箭头函数的this
值保持不变,并且无论调用上下文如何,都不能在其整个生命周期中更改。
JS红宝书学习记录(一)相关推荐
- JS红宝书学习记录(四)
js红宝书13-19 事件 事件处理程序 DOM0级事件处理程序:on+事件名,如onresize,onload等 DOM2级事件处理程序: addHandler: (element, type, h ...
- 【JS红宝书学习】9客户端检测
因为浏览器间存在大大小小的差异以及怪癖(quirk),开发人员应当优先采取一种更通用的方法,然后在使用特定于浏览器的技术增强该方案.当然这是红宝书的观点,是一种渐进增强的观点,还有与之相对的优雅降级思 ...
- js 红宝书学习笔记精简版 第一至三章
注: 本文js代码均已在本地实现过,如有异常问题,请在评论区留言.ctrl+f 可搜索有效内容, 加粗为重点 蓝色字体 为重中之重 (一) 什么是js 1995 年,JavaScript 问世. 完整 ...
- JavaScript 红宝书学习记录
函数 什么是函数? function,也叫 方法(method)或过程procedure.是一段 预定义 好的,并且可以被 反复执行的 代码块: 预定义:提前声明好,不是马上使用. 反复执行:可以被循 ...
- JS红宝书·读书笔记
JavaScript高级程序设计 花了半个多月的时间,终于又把"JS红宝书"又撸了一遍. 第一次读"JS红宝书"还是2015年初学JS的时候,那时候只是把语法部 ...
- 《JavaScript高级程序设计(第四版)》红宝书学习笔记(1)
个人对第四版红宝书的学习笔记.不适合小白阅读.这是part1,包含原书第二章(HTML中的Javascript)和第三章(语言基础).持续更新,其他章节笔记看我主页. (记 * 的表示是ES6新增的知 ...
- 《JavaScript高级程序设计(第四版)》红宝书学习笔记(2)(第四章:变量、作用域与内存)
个人对第四版红宝书的学习笔记.不适合小白阅读.这是part2.持续更新,其他章节笔记看我主页. (记 * 的表示是ES6新增的知识点,记 ` 表示包含新知识点) 第四章:变量.作用域与内存 4.1 原 ...
- OpenGL红宝书学习(1、概述)
OpenGL简介 OpenGL 全称Open Graphics Library,一种用于渲染2D.3D矢量图形的跨语言.跨平台的应用程序编程接口(API).由1992年成立的OpenGL架构评审委员会 ...
- 《JavaScript高级程序设计(第四版)》红宝书学习笔记(第五章:基本引用类型,原始值包装类型,单例内置对象)
第五章:基本引用类型 引用值(或者对象)是某个特定引用类型的实例.新对象通过使用new操作符后跟一个构造函数(constructor)来创建. 5.1 Date 这里不对Date进行详细深入,仅基于书 ...
- 男友布置的任务之-JS红宝书每日一讲
文章目录 第一章什么是JavaScript 1.1.JavaScript历史回顾 1.2.什么是JavaScript? 1.3.JavaScript与ECMAScript的关系? 1.4.JavaSc ...
最新文章
- 教你如何通过分析GC日志来进行JVM调优
- 如果让我做一回产品经理。。。
- java记录目录树_Java记录
- 动态规划 —— 背包问题
- 关于Android学习要问的一些问题
- POJ1064 Cable master 【二分找最大值】
- [摘]ASP.Net标准控件(Label控件)
- elk日志管理系统搭建
- 应用程序无法正常启动0xc0150002 解决方式
- android常用机制,11.Android 常见面试题——Binder机制
- 2018五大网络小说在线阅读APP推荐
- RuntimeError: The size of tensor a (22) must match the size of tensor b (32) at non-singleton dimens
- matlab--积分计算
- 99元紫米10000mAh移动电源开箱拆解
- 斐波那契数列(C++)
- 量子计算机核心技术突破,量子芯片研发有突破 我们距离量子计算机不远了
- 硕士毕业论文讨论部分怎么写啊?
- 驱动开发思路以及应用程序与驱动程序的区别
- 【闲书杂谈】《断舍离》——[日]山下英子
- numpy.core._exceptions.MemoryError: Unable to allocate 167. MiB for an array with shape (2970, 2460,
热门文章
- 华为薪资等级结构表2020_华为技术等级1到22级解读,17级即可百万年薪加股权分红...
- js存取cookie以及设置cookie储存时间
- linux apt 安装命令
- 故宫网售朝珠耳机 专家提醒注意保护知识产权(图)
- 时间片轮转调度算法的模拟时间片轮转调度算法(RR算法)(队尾C++实现)
- python分词,提高分词准确率
- 【项目总结】中国大学生计算机设计(机械制造暨政治正确)大赛
- 用R语言生成均匀设计
- VS Code 运行时会弹出Unins000.Exe目标目录创建文件错误
- 毕业论文格式大全、排版技巧及常见问题汇总