|
|
# **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 代替。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
...
|
...
|
|