前端知识点记录(个人理解)

字符实体

字符实体即 html 中   这类的写法,以 & 开始,以 ; 结束。

出现原因:

由于浏览器的识别和解析等原因,对于 < 和 空格,换行的解析是有问题或合并操作的,但我们想要把其展示出来,就需要用到字符实体来编写了

常见字符实体

URL 和 URI

  • URL = Uniform Resource Locator 为统一资源定位符,通常用于网络资源

  • URI = Uniform Resource Identifier 为统一资源标识符,可以标识逻辑和物理设备

  • URL 是 URI 的子集,即 URL 一定是 URI,但 URI 不一定是URL

  • 比如当后端服务写一个接口后,前端可以通过浏览器访问该接口并得到返回值,这是URL

  • 但服务器内部,可以得到某一图片等资源,即图片等资源会有一个标识交给服务器,服务器可以通过该标识访问到该资源,甚至是物理设备,这期间不一定有 WEB 的参与,这是URI

URL 的完整标准格式:

[协议类型]://[服务器地址]:[端口号]/[文件路径][文件名]?[查询]#[片段ID]
scheme://userinfo@host:port/path?query#fragment

如: https://zrb@www.example.com:123/forum/questions/tag=networking&order=newest#top

元素语义化的好处

  • 方便维护,方便阅读

  • 减少开发人员沟通

  • 无障碍阅读,如对于盲人来说,浏览器会根据语义化标签选择语言表达方式,对于strong标签会进行重读

  • 有利于SEO

    • 浏览器搜索引擎有一定的规范,其利用爬虫技术对网页(文档)进行获取
    • 浏览器会根据其规则判断是否收录该网站并对其进行索引排名,语义化标签符合其中的部分规范,其排名也会较为靠前
    • 当用户搜索信息是,浏览器就会根据其排名展示(除去广告),我们得以免费获取流量

字符编码

对于计算机来说只能识别 0 和 1,但我们所写的内容怎样编码交给计算机,计算机又怎样解码以展示给我们,所以我们需要一定的规范将其编码为二进制(01),并使计算机能根据此规范将二进制(01)解码展示我们所写的内容。

目前基本上使用的是 UTF-8 ,依靠 unicode 字符集(万国码)。

DNS解析

浏览器通过域名获取资源时, 不会直接连接到服务器, 而是通过域名服务器(DNS), DNS服务器会解析域名, 找到对应的IP地址, 并返回给浏览器, 浏览器再通过IP地址访问服务器。

域名的解析这一过程也是需要时间的, 我们可以尝试预解析域名, 以提高获取资源时的访问速度

可以通过对link标签设置 dns-prefetch 来进行优化, 如下:

1
<link rel="dns-prefetch" href="https://fonts.googleapis.com/" />

Number.prototype.toString(base) 和 Number.prototype.toFixed(digits)

toString(base) 用于将数字转为字符串, 并且根据 base 值的不同可以将数字转为对应的进制, base 的范围为 2 到 36, 默认为 10
toFixed(digits) 用于将数字转为字符串, 并且保留 digits 位小数, digits 的值为 0 到 20, 默认为 0

with语句

查看

with语句会扩展一个语句的作用域链。

1
2
3
4
5
6
7
8
9
var obj = {
name: '大梦想家',
age: 18
}

with(obj) {
console.log(name) // 大梦想家
console.log(age) // 18
}

不建议使用with语句,因为它可能是混淆错误和兼容性问题的根源。

eval函数

查看

内建函数 eval 允许执行一个代码字符串。

  • eval是一个特殊的函数,它可以将传入的字符串当做JavaScript代码来运行。

  • eval会将最后一句执行语句的结果,作为返回值。

1
2
var res = eval("var message = 'hello world'; 1111")
console.log(res) // 1111

不建议在开发中使用eval:

  • eval代码的可读性非常的差(代码的可读性是高质量代码的重要原则);

  • eval是一个字符串,那么有可能在执行的过程中被刻意篡改,那么可能会造成被攻击的风险;

  • eval的执行必须经过JavaScript解释器,不能被JavaScript引擎优化;

严格模式

查看

由于JS一直保持着兼容旧代码的方向,但旧代码的问题也被继承下来了,在ECMA5标准中,JS提出了严格模式的概念,以更加严格的方式对代码进行检测和运行。

严格模式对正常的JavaScript语义进行了一些限制:

  • 严格模式通过 抛出错误 来消除一些原有的 静默(silent)错误。(比如对对象属性设置仅可读权限,对其进行修改操作时会抛出错误)

  • 严格模式让JS引擎在执行代码时可以进行更多的优化(不需要对一些特殊的语法进行处理)。(如 a = 1,未用关键进行声明)

  • 严格模式禁用了在ECMAScript未来版本中可能会定义的一些语法。

开启严格模式

严格模式通过在文件或者函数开头使用 use strict 来开启,可以实现对文件或单个函数的严格模式设置。

严格模式的限制

  • 无法意外的创建全局变量。(如 a = 1,未用关键进行声明)

  • 严格模式会使引起静默失败(silently fail,注:不报错也没有任何效果)的赋值操作抛出异常。

  • 严格模式下,不能使用 with 语句。

  • 严格模式下,试图删除不可删除的属性会抛出错误。

  • 严格模式下,函数参数不能存在相同名字。

  • 严格模式下,不允许0的8进制语法。(如0221)。

  • 严格模式下,eval中的变量不能被外部使用。

  • 严格模式下,this绑定不会默认转为对象。

    • null和undefiend默认绑定不会指向window,而是其本身。
    • 除了null和undefiend的基本数据类型,不会指向其默认的包装对象,而是其字面量值。