一个网页通常有三个元素
- 内容
- 外观
- 行为
##内容(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 命名空间