一個網頁通常有三個元素
- 內容
- 外觀
- 行為
##內容(HTML)
- 盡量避免在HTML標簽中使用style屬性
- 不要使用與外觀有關的HTML標簽,例如<font>
- 盡量根據語義需要來選擇標簽,而不是去考慮瀏覽器會如何繪制它們。
##外觀(CSS)
將外觀與內容分開,有一種好方法就是對瀏覽器默認的繪制行為進行重置。
##行為(JS)
- 盡可能少用<script>標簽
- 盡量不要使用內嵌事件的處理方法
- 盡量不要使用CSS表達式
- 當js被用戶禁用時,我們要動態地添加一些表示無目標的替換標記
- 在內容末尾、<body>標簽之前,插入一個external.js文件
##行為隔離實例
```
|-index.html//實例
```
##異步的js代碼載入
- 當<script>標簽被放置在<body>元素的最末,這么做是因為載入js代碼的過程會阻塞頁面DOM的構建,甚至某些瀏覽器中,一些需要下載的組件也會被阻塞。將<script>移動到頁面底部可以確保它形成阻塞,并且這段js被載入后只會增強這個基本功能已經完整的頁面。
- 另一種防止js文件阻塞頁面的方法是將他們異步載入,這么做的話,我們早一些開始載入它們。HTML5為此提供了defer屬性
```
<script defer src='behaviors.js'></script>
```
有部分老的瀏覽器不支持defer屬性,我們可以用動態創建script節點,然后將它插入DOM的方法來解決這個問題,而且這種方法新老瀏覽器都能接受。我們需要使用一些內聯js代碼來載入外部js文件。這段代碼可以放在文檔的頂部,這樣一來外部js文件就會早一些被載入:
```
<head>
<script>
(function(){
var s = document.createElement('script');
s.src = 'behaviors.js';
document.getElementByTagName('head')[0].appendChild(s);
});
</script>
</head>
```
- 前言
- 第1章 面向對象的JavaScript
- 1.6 面向對象的程序設計
- 1.6.1 對象
- 1.6.2 類
- 1.6.3 封裝
- 1.6.4 聚合
- 1.6.5 繼承
- 1.6.6 多態
- 1.7 OOP小結
- 第2章 基本數據類型、數組、循環及條件表達式
- 2.1 變量
- 2.2 操作符
- 2.3 基本數據類型
- 2.3.1 查看類型操作符
- 2.3.2 數字
- 2.3.3 字符串
- 2.3.3.1 字符串轉換
- 2.3.3.2 特殊字符串
- 2.3.4 布爾值
- 2.3.4.1 邏輯運算符
- 2.3.4.2 操作符優先級
- 2.3.4.3 惰性求值
- 2.3.4.4 比較運算符
- 2.3.5 undefined與null
- 2.4 基本數據類型綜述
- 2.5 數組
- 2.5.1 增加、更新數組元素
- 2.5.2 刪除元素
- 2.5.3 數組的數組
- 2.6 條件與循環
- 2.6.1 if條件表達式
- 2.6.1.1 三元運算符
- 2.6.1.2 switch語句
- 2.6.2 else語句
- 2.6.3 代碼塊
- 2.6.4 檢查變量是否存在
- 2.6.5 循環
- 2.6.5.1 while循環
- 2.6.5.2 do-while循環
- 2.6.5.3 for循環
- 2.6.5.4 for-in循環
- 2.7 注釋
- 第2章 面試題
- 第2章 面試題及解答
- 第3章 函數
- 主要內容
- 3.1 什么是函數
- 3.1.1 調用函數
- 3.1.2 參數
- 3.2 預定義函數
- 3.2.1 parseInt
- 3.2.2 parseFloat
- 3.2.3 isNaN
- 3.2.4 ifFinite
- 3.2.5 URI的編碼與反編碼
- 3.2.6 eval
- 3.2.7 alert
- 3.3 變量的作用域
- 3.4 函數也是數據
- 3.4.1 匿名函數
- 3.4.2 回調函數
- 3.4.3 回調示例
- 3.4.4 既時函數
- 3.4.5 內部(私有)函數
- 3.4.6 返回函數的函數
- 3.4.7 能重寫自己的函數
- 3.5 閉包
- 3.5.1 作用域鏈
- 3.5.2 利用閉包突破作用域鏈
- 3.5.3 getter與setter
- 3.5.4 迭代器
- 第3章 面試題
- 第3章 面試題及解答
- 第4章 對象
- 4.1 從數組到對象
- 4.1.1 元素、屬性、方法與成員
- 4.1.2 哈希表、關聯型數組
- 4.1.3 訪問對象屬性
- 4.1.4 調用對象方法
- 4.1.5 修改屬性與方法
- 4.1.6 使用this值
- 4.1.7 構造器函數
- 4.1.8 全局對象
- 4.1.9 構造器屬性
- 4.1.10 instanceof操作符
- 4.1.11 返回對象的函數
- 4.1.12 傳遞對象
- 4.1.13 比較對象
- 4.1.14 Webkit控制臺中的對象
- 4.2 內建對象
- 4.2.1 Object
- 4.2.2 Array
- 4.2.3 Function
- 第8章 編程模式與設計模式
- 8.1 編程模式
- 8.1.1 行為隔離
- 8.1.2 命名空間