Authored by skinny.wu

每周技术分享

# **JavaScript 最佳实践(上)**
标签(空格分隔): JavaScript 学习笔记
---
[TOC]
---
## 一、JavaScript初探
###1.名词概念
* DOM: Document Object Model (文档对象模型)
* BOM: Browser Object Model (浏览器对象模型)
###2.知识点解析
#### **JavaScript内置的对象**
* date(显式使用)
* string(隐式使用)
#### **事件句柄: onload属性**
* 可以在元素的标记上增加<bodyonload="functionName()"></body>
* 也可以自JavaScript中使用document.onload = functionName()
#### **关键字var和作用域**
* 使用var声明的变量,每个变量的作用域都是局部的
* 不适用var声明的变量,变量的作用域是全局的,可以被web页面任何地方的所有JavaScript代码访问
* 考虑作用域时的规则
* 如果函数中的变量在声明时使用了关键字var,它就只能在此函数的局部使用;
* 如果函数中的变量在声明时没有使用关键字var,而又存在一个同名的全局变量,它就被当作那个全局变量;
* 如果变量在局部中声明并使用了关键字var,但它又没有被初始化(比如赋值),它可以访问但没有被定义;
* 如果变量在局部中声明,但没有使用关键字var,或显式地声明为全局变量,但它又没有被初始化,它在全局中可以访问但没有被定义。
#### **属性操作符(property operator),又叫点操作符**
事件元素、事件句柄以及对象方法都被认为是JavaScript中的对象属性,他们都要通过属性操作符来访问。
#### **语句的终止符——;**
当在一行中输入一个完整的语句而没有带分号结束时,换行符终止了这一语句。所以所有的语句终止都使用分号能很好地避免不必要的错误
#### **JavaScript沙箱**
JavaScript构建为只在沙箱中运行。沙箱是一个受保护的环境,在这个环境中,脚本不能访问浏览器所在的计算机资源。另外,浏览器所实现的安全条件高出并超出了JavaScript语言所建立的最低条件。这些都定义在一个与浏览器相关的安全策略中,它决定了脚本能做什么不能做什么。
####**可访问性**
无论创建一个什么样的JavaScript功能,绝不能离间网站和其访问者。应该保证不能或不愿启动JavaScript的人,如果他们使用不启动脚本的浏览器也能访问网站的基本资源。
####**noscript标记**
浏览器或应用不能处理脚本时(因为某些原因而将JavaScript禁用了),那么就会处理noscript的内容,否则,noscript就会被忽略掉。
#### **UDF (User Defined Function):用户自定义函数**
```JavaScript
function functionName (params) {
//可以返回值,也可以不返回
}
```
###Tips
- [ ] 将JavaScript程序代码块放入到外部JavaScript文件中
- [ ] 在每个JavaScript语句块、函数或对象定义的开始,都使用至少一行注释。另外,在所有JavaScript库文件的开始都提供一个更详细的注释块, 其中包括作者、日期、依存关系以及脚本的详细目的等信息。
---
## 二、JavaScript数据类型与变量
### 1.变量的标识
* 每个变量的标识符是唯一的,由字母、数字、下划线跟$符组成,必须以一个字母、$符或下划线开始
* 可以使用Unicode的字母,也可以使用转义序列
* 区分大小写
* 不能是JavaScript关键字
* 命名规则
* 使用有含义的词,可以使用暗示数据类型的内容作为名字的一部分(匈牙利命名法)
* 对于集合,名称应该使用复数形式
* 对象名首字母大写,函数和变量是以小写字母开始;单词首字母大写(驼峰命名法),单词之间使用横线或下划线也能达到这种效果
* 使用下划线(_)来标明私有变量(Prototype效果)
### 2.作用域
* **局部变量** 局部作用域的变量在一个函数内部定义、初始化和使用;当函数终止时,变量也就不存在了。
* **全局变量** 在Web网页所包含的任何JavaScript中的任何地方都可以访问全局变量,无论JS是直接嵌入到网页中的还是从JavaScript库中引入的
### 3.简单类型
**数据类型**
* 字符串型
* 数字型
* 布尔型
**内置对象**
* 数字
* 字符串
* 布尔型
**字符串型**
* 字符串直接量是一个使用单引号或双引号分隔的多字符的序列
* 可以包含转义序列,比如用\n代表换行符
* 函数escape,可以对整个字符串进行编码,把ASCII码转换为URL编码
* encodeURI和decodeURI 能处理的字符集不仅仅限于ASCII
* 可以使用string函数显式地把一个变量转换成字符串
**布尔型**
有两个值:true和false 不必用引号引起来
**数值型**
* Infinity和-Infinity来表示正负无穷大,当发生了数字溢出的时候,会返回一个正无穷大
* 进制表示 十六进制的数字以0x开头,八进制的数字以0开头
* 把字符串或布尔值转换为数字的转换函数
* parseInt
parseInt(param1, param2) 参数2用来指定基数
* parseFloat
* 函数IsFinite测试一个变量的值是否是无穷大
如果是无穷大(infinity)或NaN,函数返回false,否则返回true
**null和undefined**
null(空):没有被定义,也没有被赋值过
undefined(未定义):声明过,但没有初始化过这个变量
函数isNaN专门用来测试一个变量是否是NaN
### 4.常量
关键字const被用来创建一个JavaScript常量:
`const CURRENT_MONTH = 3.5;`
不能在常量定义之后对它进行赋值或重赋值
### Tips
在定义任何变量时,无论是全局变量还是局部变量,都要使用关键字var
----
## 三、运算符和语句
###1.JavaScript语句的格式
JavaScript语句通常以分号结尾,在某些情况下换行符也能结尾。**显式地以分号结束一个JavaScript语句,无论这是否必要
###2.简单语句
----
## 四、JavaScript对象
###1.Number对象
四个常量属性
- Number.MAX_VALUE
- Number.MIN_VALUE
- Number.NEGATIVE_INFINITY
- Number.NEGATIVE_INFINITY
几个方法
- NumberObject.toExponential(num)
把对象的值转换成指数计数法。
**num** 必需。规定指数计数法中的小数位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围。如果省略了该参数,将使用尽可能多的数字。
- NumberObject.toPrecision(num)
在对象的值超出指定位数时将其转换为指数计数法。
**num** 必需。规定必须被转换为指数计数法的最小位数。该参数是 1 ~ 21 之间(且包括 1 和 21)的值。有效实现允许有选择地支持更大或更小的 num。如果省略了该参数,则调用方法toString(),而不是把数字转换成十进制的值。
- NumberObject.toFixed(num)
把 Number 四舍五入为指定小数位数的数字。
**num** 必需。规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围。如果省略了该参数,将用 0 代替。
... ...