以为懂了,实际没懂。对新知识保持好奇心很有必要,但对原有知识也要更深入了解其细节。温故知新,“新”,应该是自己不懂的,亦或是遗忘了的,亦或是......

问题1:

Object.prototype.toString.call([])的结果是"[object Array]",为什么和[].toString()的结果""不一致?按理说,结果应该是一样的。

先来说说Object.prototype.toString.call([]),这个技巧常用来区分某个变量值是ObjectArray哪一种数据类型(因为此时 typeof 排不上用场了)。

typeof []; // "object"
typeof {}; // "object" Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call({}); // "[object Object]"

结果不一致的原因,查阅了 MDN ,是这么描述的:

  1. 每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString() 方法被每个 Object 对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 "[object type]",其中 type 是对象的类型。
  2. Array对象覆盖了Object的 toString 方法。对于数组对象,toString 方法连接数组并返回一个字符串,其中包含用逗号分隔的每个数组元素。

扩展:

  1. 还有什么方法能区分ObjectArray?答案:ES5提供的 Array.isArray()
Array.isArray([]); // true
Array.isArray({}); // false
  1. 如何记忆Object.prototype.toString.call()Object.prototype.toString.apply()这两个的第二个参数,总是记不清,哪个该传数组?

    答案:apply 是以字母 a 开头的,联想到 array,就知道它该传递数组作为参数了,是不是很容易就记住了。

    ps:关于记忆知识的小窍门,欢迎留言,看看谁的小窍门更容易让人记住~~。

问题来源:同事提问。交流也是学习的一种途径。

问题2:

请准确说出以下表达式的结果及数据类型。

'1,2,3,4'.split();

'112211331144'.split('11', 2);

答案:

'1,2,3,4'.split(); // ["1,2,3,4"]

'112211331144'.split('11', 2); // ["", "22"]

关键点:

  • 语法:str.split([separator[, limit]])
  • 返回值是一个字符串数组 arr。
  • 参数值均为可选
    • separator:分隔符,若不传,返回[原始字符串]。之前一直以为默认 逗号 分隔呢,不记得是在哪记忆的了。感觉像小 海伦凯勒“看了”或“听了”很多书,怀疑自己的思想或想法是不是从其他地方学来的。
    • limit:限制返回值 arr 个数,若不传,默认没有限制,即返回所有值;若 limit < arr.length,则 arr.length = limit;若 limit > arr.length,则结果如同没传。

可参考:MDN 上关于 String.prototype.split 的描述

问题来源:看文档。

问题3:

请准确说出以下表达式的结果及数据类型。

var str = 'aabbccdd';

str.substring(4,0);
str.substring(4,NaN);
str.substring(-4,10);

答案:

str.substring(4,0); // "aabb" 等同于 str.substring(0,4)
str.substring(4,NaN); // "aabb" 等同于 str.substring(4,0)
str.substring(-4,10); // "aabbccdd" 等同于 str.substring(0)

关键点:

  • 语法:str.substring([indexStart[,indexEnd]])
  • 参数均可不传
    • indexStart,不传为 0;
    • indexEnd,不传为 str.length;
    • 任一参数,小于 0 或 为 NaN, 则视为 0
    • 任一参数,大于 str.length, 则视为 str.length
    • indexStart > indexEnd,结果如同参数调换的结果。

可参考:MDN 上关于 String.prototype.substring 的描述

问题来源:看文档。

问题4:

  • a 标签的 href 和 onclick 属性同时存在时哪个先触发?
  • 对于<a href="#">点击</a>点击了有什么表现?
  • a标签下的href="javascript:void(0)"起到了什么作用?
  • a标签属性rel='nofollow'有什么作用?

答案(自己写demo可验证):

  • a 标签的 href 会先触发。
  • <a href="#">点击</a>,点击了 href="#top" 或者 href="#" 链接会返回到页面顶部(h5新特性)。
    • 备注:若页面中有标签且id值为top,点击href="#top"的 a 标签,不会返回到页面顶部,而是返回到 id 值为 top 的地方(锚点的特性)。
  • 表现形式,具有 a 标签的链接样式,但不具备 a 标签的链接跳转功能或刷新页面。建议用 button 替换此类伪链接。若要执行实际,建议添加点击事件触发。
    • void 表达式返回undefined,通常用来创建正确的undefined,因为undefined可被赋值修改。
    • 当点击一个javascript: URI时,会执行 URI 中的代码,返回值替换页面内容,除非返回值为 undefined。
    • 可测试一下代码查看
      <a href="javascript:0">整个页面会被替换成一个字符 0 (ie9改变,chrome不变)</a>
    <a href="javascript:void(document.body.style.backgroundColor='skyblue')">页面背景为蓝色,内容不变(返回值为 undefined)</a>
    <a href="javascript:jsfn()">调用jsfn,(ie9内容改变,chrome内容不变,背景色改变)</a>
    <script>
    function jsfn() {
    document.body.style.backgroundColor='orangered';
    return 11
    }
    </script>
  • rel 属性值:
    • 'nofollow':和 SEO 有关,爬虫遇到链接,默认爬取链接内容,加了该属性值就不爬取该链接的内容。
    • 'prefetch'、'preload':和资源加载有关,prefetch 空闲加载,repload 立即加载。
    • 'noopener'、'noreferrer':和安全有关,控制跳转到其他页面发送的安全信息,比如http头、页面名字等。

可参考:

问题来源:代码中经常写,但不理解。理解不理解的代码也是一种学习途径,就好比弄懂不知道的英文单词一样。

备注:这些点看似很小,可能平常根本不关注,但遇到了,就是一个坑。懂原理能少走一些弯路。后续遇到了再补充。

关于js的一些被忽视但也很重要的知识点的更多相关文章

  1. 关于 Node.js 的认证方面的教程(很可能)是有误的

    原文地址:Your Node.js authentication tutorial is (probably) wrong 我搜索了大量关于 Node.js/Express.js 认证的教程.所有这些 ...

  2. js中容易被忽视的事件问题总结

    一:跨平台事件 什么叫跨平台事件?即在不同的浏览器上执行同一事件,所使用的方法不同. 什么是EventUtil对象?有什么作用?即将所有与事件相关的函数,融合在一起的一个容器,方便管理事件对象,它没有 ...

  3. 分享10个Js的小型库,效果真的很棒

    1.$fx()简介:$fx()是一个轻量级的动画库,一些复杂的动画,可以由多个简单的动画效果进行组合,但是提供的是混淆压缩过的代码,对于研究动画源码的朋友可能特别不爽API:http://fx.ine ...

  4. 每天一个JS 小demo之商品下架特效制作,主要知识点:定时器,倒计时,抖动特效。PS:由于不方便上传文件夹,只能上传效果图,图片等素材需自寻哟。

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. js 扒一扒这些题目都考了哪些知识点

    1.空数组是true还是false 题目: <script> var tmp = 'a'; if([]==false) tmp+='b'; if(![]) tmp +='c'; alert ...

  6. jquery.cookie.js操作cookie实现“记住密码”,很简单很强大

    //初始化页面时验证是否记住了密码 $(document).ready(function() { if ($.cookie("rmbUser") == "true&quo ...

  7. 玩转【Mock.js】,前端也能跑的很溜

    现在开发已经是前后端分离了,前端和后端可以同时进行开发,互不影响,但是有些时候后端开发的接口慢于前端,导致前端需要等待后端的接口完成才能完成前后端对接,为了解决这个痛点,出现了模拟接口数据的方案,目前 ...

  8. Firefox 插件 JSview是一套比较实用的JS,CSS文件查看工具,很方便,很快捷地查看页面引用了哪些文件,作为Web前端开发者是一套必备的插件,由于Firefox升级过快,插件很快不兼容了,这里对插件做了一些调整,可以兼容最新Firefox浏览器(目前FireFox 21)

    JSView Firefox Plugins Download  点击下载

  9. JS自定义对象,正则表达式,JQuery中的一些知识点

    一:自定义对象 1.基本概念:①对象:包含一系列无序属性和方法的集合.②键值对:对象中的数据是以键值对的形式存在的,以键取值.③属性:描述对象特征的一系列变量.[对象中的变量]④方法:描述对象行为的一 ...

随机推荐

  1. NSAttributedString可以强制转换为NSMutableAttributedString类型吗?下面这代码有什么问题 为什么报错

    -(void)insetEmotion:(EmotionModel*)emotionModel{ if(emotionModel.code){ /** 在TextView中插入图片首选要知道光标的位置 ...

  2. mysql免密登录和修改密码

    (1)停止mysql服务      /etc/init.d/mysqld   stop (2)跳过密码验证      mysqld_safe  --skip-grant-tables  & ( ...

  3. git 路上的拦路虎 了解一下

    我们提交代码现在大部分都在用git  管理代码,有时候会遇到一些问题 用git 会发现一些问题 之前报了一些错误,没有记录,这次记录一下,顺便写一下解决方式: 输输入git remote add or ...

  4. Javascript实现百度API

    百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,可帮助您在网站中构建功能丰富.交互性强的地图应用,支持PC端和移动端基于浏览器的地图应用开发,且支持HTML5特 ...

  5. 【nodejs原理&源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick

    [摘要] 官网博文翻译,nodejs中的定时器 示例代码托管在:http://www.github.com/dashnowords/blogs 原文地址:https://nodejs.org/en/d ...

  6. 基于webpack实现多html页面开发框架三 图片等文件路径替换、并输出到打包目录

    一.解决什么问题      1.图片路径替换.并输出到打包目录      2.输出目录清理 二.需要安装的包 file-loader:html.css中图片路径替换,图片输出到打包目录:命令:npm ...

  7. 洛谷 P3420 [POI2005]SKA-Piggy Banks 题解

    蒟蒻的第二篇题解 嗯,直接进入正题 先告诉你们这是并查集,好吧,标签上面有,再来分析这为什么是并查集. 根据题意: 每一个存钱罐能够用相应的钥匙打开或者被砸开,Byteazar已经将钥匙放入到一些存钱 ...

  8. mac office软件的安装与破解

    1.mac  office 软件的安装及破解  http://10176523.cn/archives/29/ 下载后安装  切记不要登录 然后用这个文件 破解

  9. CoderForces999B- Reversing Encryption

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  10. [知也无涯]GAN对人脸算法的影响

    红绣被,两两间鸳鸯.不是鸟中偏爱尔,为缘交颈睡南塘.全胜薄情郎. 看到一篇GAN对人脸图像算法的影响,决心学习一个. 人脸检测 这也是我最关注的模块.文章推荐了极小面部区域人脸识别Finding ti ...