路漫漫其修远兮, 吾将上下而求索

0%

所有 typeof 返回值为 object 的对象, 都会包含一个内部属性[[class]]. 一般来说把它当成一个内部的分类. 这个分类的值无法直接访问, 需要通过 Object.prototype.toString() 来查看

1
2
3
4
5
Object.prototype.toString.call([])
// "[object Array]"

Object.prototype.toString.call(function() {})
// "[object Function]"

为什么会有 eventLoop

JS 的任务分为同步和异步两种, 由于 js 执行引擎为单线程. 他们的处理方式有所不同. 同步任务直接放在主线程上依次执行. 异步任务则会存放在任务队列中, 如果有多个异步任务需执行则需要在任务队列中等待执行.

单线程的 js 只能同时做一件事情, 而对于有些异步事件(如 ajax 请求) 往往耗时较长. 主线程会在请求发出后去干别的事情. 浏览器先通过事件注册 ajax 的回调函数. 待响应返回后再添加到任务队列中等待处理. 而主线程也会在空闲时检查任务队列中是否有新添加的异步任务. 如果任务队列中存在待执行任务则拿出来执行. 整个把异步任务添加到异步队列中, 主线程空闲时检查异步任务队列非空则执行的过程就是事件环, 也是 js 实现异步逻辑的核心

阅读全文 »

常见的语义化标签

article aside details figcaption figure footer header main mark nav section summary time and so on…

优点

  • 对于搜索引擎友好. 有了良好的语义, 网页内容更容易被搜索引擎爬虫爬取
  • 开发维护更加友好. 语义化代码有利于团队内其他成员阅读你的代码并基于你的代码进行改造和升级.
  • 提升代码的可复用性和可移植性. 方便在多种设备执行, 例如移动设备, 盲人设备等等

如何实现语义化

一般网站分为头部, 导航, 文章, 侧栏, 底部… 根据不同的部位可使用不同的标签进行书写: header nav article section footer aside

表示具体意义的区块也可以用特定意义的标签: a, abbr, address, blockquote, caption, code, datalist, del, details…

  • 尽量少的使用 div span 等无语义的标签
  • 在语义化不明显时, 例如既可以用 div 也可以用 p 标签的地方尽可能用 p 标签. 因为 p 标签有默认的上下间距. 有利于兼容特殊终端
  • 不要使用纯样式标签. 比方说 b font u 而是使用 css 样式代替
  • 每个表单项 input 元素都添加对应的 label 标签, 并且关联两者优化用户体验

parseInt 和 Math.floor 都可以实现取整, 但是处理的方式存在差别

parseInt

parseInt(string, radix) 将一个字符串 string 转换为 radix 进制的整数, radix 为介于 2 - 36 之间的整数, 如果 radix 传入的是 0, 会以默认值 10 处理.

其中

string: 是要被解析的字符串, 如果传入的值不是一个字符串则会将其转化成字符串(toString 方法), 字符串开头结尾的空白字符会被忽略

radix: 一个介于 2 - 36 的整数, 表示的是上述字符串的基数. 默认值是 10, 如果传入的 radix 小于 2 或者大于 36 则返回 NaN

阅读全文 »