javascript容易被忽略的細(xì)節(jié)

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

再讀js高級(jí)程序設(shè)計(jì)(第3版),把一些細(xì)節(jié)記錄一下

未完待續(xù)。。。

第三章 基本概念

1、null == undefined;// true
2、typeof null;// 'object' typeof NaN;// 'number'
3、js中可以保存+0和-0,但是兩者相等;
4、浮點(diǎn)數(shù)值需要的內(nèi)存空間是整數(shù)值的兩倍;
5、不要做這樣的判斷,因?yàn)楦↑c(diǎn)數(shù)最高精度是17位,0.1+0.2=0.300000000000000004;

if (a + b == 0.3) { }

6、任何數(shù)除以0返回NaN,涉及NaN的操作都返回NaN;
7、NaN == NaN;// false
8、isNaN()適用于對(duì)象,先調(diào)對(duì)象的valueOf(),如果返回的值不能轉(zhuǎn)換為數(shù)值,再測(cè)試toString()的返回值;
9、parseInt()的第二個(gè)參數(shù)可以制定進(jìn)制,parseFloat只能轉(zhuǎn)化10進(jìn)制;
10、String():如果參數(shù)有toString()方法,則調(diào)用;如果參數(shù)是null/undefined則返回"null"/"undefined";
11、Infinity * 0 = NaN; Infinity *Infinity = Infinity; Infinity/Infinity = NaN;

第四章:變量、作用域和內(nèi)存

1、ECMAScript中所有函數(shù)的參數(shù)都是按值傳遞的,文中是這么解釋的;參數(shù)是引用類(lèi)型時(shí),只是對(duì)地址的值拷貝;

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

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

第五章 引用類(lèi)型

1、使用字面量定義對(duì)象時(shí),實(shí)際上不會(huì)調(diào)用Object構(gòu)造函數(shù),Array也是這樣;

2、以下方式不推薦,因?yàn)闀?huì)導(dǎo)致解析兩次代碼(第一次試解析常規(guī)ECMAScript代碼,第二次是解析傳入構(gòu)造函數(shù)中的字符串)

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

3、jQuery源碼中通過(guò)索引使用this的:

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

我就去群里問(wèn)這是什么用法,有人一眼就看出來(lái)這是jQ源碼
A:你得從頭看,不從頭看是看不懂的;
我:為什么可以this[0]?
A:為什么數(shù)組可以?
我:數(shù)組可以但是為什么對(duì)象也能這么用?
A:所以讓你從頭看,你都不知道什么時(shí)候?qū)ο筠D(zhuǎn)化成數(shù)組的(然后截圖jQuery.makeArray)
其實(shí)很簡(jiǎn)單,js中對(duì)象是可以通過(guò)key來(lái)賦值的,上面的0其實(shí)相當(dāng)于key:

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

    var p = new Person('glm');
    console.log(p.name); // "new name"
  • delete 不會(huì)對(duì)原型產(chǎn)生影響,而且可以暴露原型屬性
  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"
  • 如果函數(shù)以在前面加上new前綴的方式來(lái)調(diào)用,且返回值不是一個(gè)對(duì)象,則返回this(該新對(duì)象)
 // 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對(duì)象都是以COM對(duì)象的形式實(shí)現(xiàn)的。
2、每個(gè)節(jié)點(diǎn)都有childNodes屬性,其中保存著一個(gè)NodeList對(duì)象,這個(gè)對(duì)象是類(lèi)數(shù)組對(duì)象,它實(shí)際是基于DOM結(jié)構(gòu)動(dòng)態(tài)執(zhí)行查詢(xún)的結(jié)果;
3、以下代碼在IE8及以前版本是無(wú)效的,因?yàn)檫@些版本中NodeList實(shí)現(xiàn)為一個(gè)COM對(duì)象。

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()移除的節(jié)點(diǎn)仍然為文檔所有,只是文檔中已經(jīng)沒(méi)有了自己的位置,被移除的節(jié)點(diǎn)可以根據(jù)返回值的到;

5、NodeList及其“近親”NamedNodeMap和HTMLCollection都是動(dòng)態(tài)的,每當(dāng)文檔結(jié)構(gòu)發(fā)生變化時(shí),它們都會(huì)得到更新;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 變量 聲明變量 命名變量區(qū)分大小寫(xiě)的語(yǔ)言第一個(gè)字符是字母或下劃線(xiàn)_,數(shù)字不能作為第一個(gè)字符字符必須是字母,數(shù)字或者...
    flyingtoparis閱讀 901評(píng)論 0 0
  • JavaScript之父:Brendan Eich 。 -基本語(yǔ)法:借鑒了C語(yǔ)言和Java語(yǔ)言。-數(shù)據(jù)結(jié)構(gòu):借鑒了...
    饑人谷_kule閱讀 672評(píng)論 0 0
  • 一元操作符++,--操作符操作示例 +,-操作符+基本是原樣輸出 布爾操作符邏輯非 ! 如果前面再加上個(gè)!會(huì)看起來(lái)...
    togeek閱讀 634評(píng)論 3 3
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,694評(píng)論 19 139
  • 平凡又傳奇的愛(ài)情故事, 一對(duì)男女,不斷分開(kāi)又相遇,卻還總是在愛(ài)著對(duì)方。 印象最深的,是張曼玉冒雨出海去找那個(gè)黑社會(huì)...
    桃花變成了huli閱讀 612評(píng)論 0 2

友情鏈接更多精彩內(nèi)容