javascript容易被忽略的细节

新博客地址:http://gengliming.com

再读js高级程序设计(第3版),把一些细节记录一下

未完待续。。。

第三章 基本概念

1、null == undefined;// true
2、typeof null;// 'object' typeof NaN;// 'number'
3、js中可以保存+0和-0,但是两者相等;
4、浮点数值需要的内存空间是整数值的两倍;
5、不要做这样的判断,因为浮点数最高精度是17位,0.1+0.2=0.300000000000000004;

if (a + b == 0.3) { }

6、任何数除以0返回NaN,涉及NaN的操作都返回NaN;
7、NaN == NaN;// false
8、isNaN()适用于对象,先调对象的valueOf(),如果返回的值不能转换为数值,再测试toString()的返回值;
9、parseInt()的第二个参数可以制定进制,parseFloat只能转化10进制;
10、String():如果参数有toString()方法,则调用;如果参数是null/undefined则返回"null"/"undefined";
11、Infinity * 0 = NaN; Infinity *Infinity = Infinity; Infinity/Infinity = NaN;

第四章:变量、作用域和内存

1、ECMAScript中所有函数的参数都是按值传递的,文中是这么解释的;参数是引用类型时,只是对地址的值拷贝;

function setName(obj) {
  obj.name = "Nicholas";
  obj = new Object();
  obj.name = "Greg";
}

var person = new Object();
setName(person);
alert(person.name); //Nicholas

第五章 引用类型

1、使用字面量定义对象时,实际上不会调用Object构造函数,Array也是这样;

2、以下方式不推荐,因为会导致解析两次代码(第一次试解析常规ECMAScript代码,第二次是解析传入构造函数中的字符串)

var sum = new Function('num1', 'num2', 'return num1 + num2 ');

3、jQuery源码中通过索引使用this的:

      this.context = document;
      // 看这里
      this[0] = document.body;
      this.selector = selector;
      this.length = 1;

我就去群里问这是什么用法,有人一眼就看出来这是jQ源码
A:你得从头看,不从头看是看不懂的;
我:为什么可以this[0]?
A:为什么数组可以?
我:数组可以但是为什么对象也能这么用?
A:所以让你从头看,你都不知道什么时候对象转化成数组的(然后截图jQuery.makeArray)
其实很简单,js中对象是可以通过key来赋值的,上面的0其实相当于key:

    function Person( name ) {
      this.name = name;
      this["name"] = 'new name';
    }

    var p = new Person('glm');
    console.log(p.name); // "new name"
  • delete 不会对原型产生影响,而且可以暴露原型属性
  function Person() {
    this.name = 'lmg';
  }
  Person.prototype.name = 'glm';

  var p = new Person();
  console.log(p.name); // "lmg"
  delete p.name;
  console.log(p.name); // "glm"
  • 如果函数以在前面加上new前缀的方式来调用,且返回值不是一个对象,则返回this(该新对象)
 // function Person() {
 //   this.name = 'lmg';
 //   return 1;
 // }
 // console.log(new Person()); // Person {name: "lmg"}

  function Person() {
    this.name = 'lmg';
    return {};
  }
  console.log(new Person()); // Object {}

第十章 DOM

1、IE中的所有DOM对象都是以COM对象的形式实现的。
2、每个节点都有childNodes属性,其中保存着一个NodeList对象,这个对象是类数组对象,它实际是基于DOM结构动态执行查询的结果;
3、以下代码在IE8及以前版本是无效的,因为这些版本中NodeList实现为一个COM对象。

var arrayofNodes = Array.prototype.slice.call(someNode.childNodes,0)

以下为跨浏览器的方法:

function convertToArray(nodes) {
  var array = null;
  try {
    array = Array.prototype.slice.call(nodes, 0); // 非IE
  } catch (ex) {
    array = new Array();
    for (var i=0, len = nodes.length; i < len; i++ ) {
      array.push(nodes[i]);
    }
  }
  return array;
}

4、removeChild()和replaceChild()移除的节点仍然为文档所有,只是文档中已经没有了自己的位置,被移除的节点可以根据返回值的到;

5、NodeList及其“近亲”NamedNodeMap和HTMLCollection都是动态的,每当文档结构发生变化时,它们都会得到更新;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • 变量 声明变量 命名变量区分大小写的语言第一个字符是字母或下划线_,数字不能作为第一个字符字符必须是字母,数字或者...
    flyingtoparis阅读 797评论 0 0
  • JavaScript之父:Brendan Eich 。 -基本语法:借鉴了C语言和Java语言。-数据结构:借鉴了...
    饥人谷_kule阅读 581评论 0 0
  • 一元操作符++,--操作符操作示例 +,-操作符+基本是原样输出 布尔操作符逻辑非 ! 如果前面再加上个!会看起来...
    togeek阅读 589评论 3 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,600评论 18 139
  • 平凡又传奇的爱情故事, 一对男女,不断分开又相遇,却还总是在爱着对方。 印象最深的,是张曼玉冒雨出海去找那个黑社会...
    桃花变成了huli阅读 523评论 0 2