JS红宝书学习记录(一)

红宝书记录1-3

三个组成部分:ECMAScript,DOM,BOM

script标签属性:

1.外部脚本使用:src(URL)

  • async 异步下载,不阻塞文档呈现。不保证顺序执行
  • defer 延迟下载,文档完全呈现后才下载

2.type 类型即MIME:媒体类型(通常称为 Multipurpose Internet Mail ExtensionsMIME 类型 )是一种标准,用来表示文档、文件或字节流的性质和格式。它在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):

原始值转换为数字转换为字符串转换为布尔值
false0“false”false
true1“true”true
00“0”false
11“1”true
“0”0“0”true(字符串不为空)
“000”0“000”true
“1”1“1”true
NaNNaN"NaN"(正常思路)false
InfinityInfinity“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
null0(空指针,定义过,赋值0)“null”false
undefinedNaN(未定义的值)“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值保持不变,并且无论调用上下文如何,都不能在其整个生命周期中更改。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值