前端知识点记录(个人理解)
字符实体
字符实体即 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 | var obj = { |
不建议使用with语句,因为它可能是混淆错误和兼容性问题的根源。
eval函数
查看
内建函数 eval 允许执行一个代码字符串。
-
eval是一个特殊的函数,它可以将传入的字符串当做JavaScript代码来运行。
-
eval会将最后一句执行语句的结果,作为返回值。
1 | var res = eval("var message = 'hello world'; 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的基本数据类型,不会指向其默认的包装对象,而是其字面量值。