Authored by skinny.wu

每周技术分享

  1 +# **JavaScript 最佳实践(上)**
  2 +
  3 +标签(空格分隔): JavaScript 学习笔记
  4 +
  5 +---
  6 +[TOC]
  7 +
  8 +---
  9 +## 一、JavaScript初探
  10 +###1.名词概念
  11 + * DOM: Document Object Model (文档对象模型)
  12 + * BOM: Browser Object Model (浏览器对象模型)
  13 +
  14 +###2.知识点解析
  15 +#### **JavaScript内置的对象**
  16 +* date(显式使用)
  17 +* string(隐式使用)
  18 +#### **事件句柄: onload属性**
  19 +* 可以在元素的标记上增加<bodyonload="functionName()"></body>
  20 +* 也可以自JavaScript中使用document.onload = functionName()
  21 +#### **关键字var和作用域**
  22 +* 使用var声明的变量,每个变量的作用域都是局部的
  23 +* 不适用var声明的变量,变量的作用域是全局的,可以被web页面任何地方的所有JavaScript代码访问
  24 +* 考虑作用域时的规则
  25 + * 如果函数中的变量在声明时使用了关键字var,它就只能在此函数的局部使用;
  26 + * 如果函数中的变量在声明时没有使用关键字var,而又存在一个同名的全局变量,它就被当作那个全局变量;
  27 + * 如果变量在局部中声明并使用了关键字var,但它又没有被初始化(比如赋值),它可以访问但没有被定义;
  28 + * 如果变量在局部中声明,但没有使用关键字var,或显式地声明为全局变量,但它又没有被初始化,它在全局中可以访问但没有被定义。
  29 +#### **属性操作符(property operator),又叫点操作符**
  30 +事件元素、事件句柄以及对象方法都被认为是JavaScript中的对象属性,他们都要通过属性操作符来访问。
  31 +#### **语句的终止符——;**
  32 +当在一行中输入一个完整的语句而没有带分号结束时,换行符终止了这一语句。所以所有的语句终止都使用分号能很好地避免不必要的错误
  33 +#### **JavaScript沙箱**
  34 +JavaScript构建为只在沙箱中运行。沙箱是一个受保护的环境,在这个环境中,脚本不能访问浏览器所在的计算机资源。另外,浏览器所实现的安全条件高出并超出了JavaScript语言所建立的最低条件。这些都定义在一个与浏览器相关的安全策略中,它决定了脚本能做什么不能做什么。
  35 +####**可访问性**
  36 +无论创建一个什么样的JavaScript功能,绝不能离间网站和其访问者。应该保证不能或不愿启动JavaScript的人,如果他们使用不启动脚本的浏览器也能访问网站的基本资源。
  37 +####**noscript标记**
  38 +浏览器或应用不能处理脚本时(因为某些原因而将JavaScript禁用了),那么就会处理noscript的内容,否则,noscript就会被忽略掉。
  39 +#### **UDF (User Defined Function):用户自定义函数**
  40 +```JavaScript
  41 + function functionName (params) {
  42 + //可以返回值,也可以不返回
  43 + }
  44 +```
  45 +
  46 +###Tips
  47 +- [ ] 将JavaScript程序代码块放入到外部JavaScript文件中
  48 +- [ ] 在每个JavaScript语句块、函数或对象定义的开始,都使用至少一行注释。另外,在所有JavaScript库文件的开始都提供一个更详细的注释块, 其中包括作者、日期、依存关系以及脚本的详细目的等信息。
  49 +
  50 +---
  51 +
  52 +## 二、JavaScript数据类型与变量
  53 +### 1.变量的标识
  54 +* 每个变量的标识符是唯一的,由字母、数字、下划线跟$符组成,必须以一个字母、$符或下划线开始
  55 +* 可以使用Unicode的字母,也可以使用转义序列
  56 +* 区分大小写
  57 +* 不能是JavaScript关键字
  58 +* 命名规则
  59 + * 使用有含义的词,可以使用暗示数据类型的内容作为名字的一部分(匈牙利命名法)
  60 + * 对于集合,名称应该使用复数形式
  61 + * 对象名首字母大写,函数和变量是以小写字母开始;单词首字母大写(驼峰命名法),单词之间使用横线或下划线也能达到这种效果
  62 + * 使用下划线(_)来标明私有变量(Prototype效果)
  63 +
  64 +### 2.作用域
  65 +* **局部变量** 局部作用域的变量在一个函数内部定义、初始化和使用;当函数终止时,变量也就不存在了。
  66 +* **全局变量** 在Web网页所包含的任何JavaScript中的任何地方都可以访问全局变量,无论JS是直接嵌入到网页中的还是从JavaScript库中引入的
  67 +
  68 +### 3.简单类型
  69 +**数据类型**
  70 +
  71 +* 字符串型
  72 +* 数字型
  73 +* 布尔型
  74 +
  75 +**内置对象**
  76 +
  77 +* 数字
  78 +* 字符串
  79 +* 布尔型
  80 +
  81 +**字符串型**
  82 +
  83 +* 字符串直接量是一个使用单引号或双引号分隔的多字符的序列
  84 +* 可以包含转义序列,比如用\n代表换行符
  85 +* 函数escape,可以对整个字符串进行编码,把ASCII码转换为URL编码
  86 +* encodeURI和decodeURI 能处理的字符集不仅仅限于ASCII
  87 +* 可以使用string函数显式地把一个变量转换成字符串
  88 +
  89 +**布尔型**
  90 +有两个值:true和false 不必用引号引起来
  91 +
  92 +**数值型**
  93 +
  94 +* Infinity和-Infinity来表示正负无穷大,当发生了数字溢出的时候,会返回一个正无穷大
  95 +* 进制表示 十六进制的数字以0x开头,八进制的数字以0开头
  96 +* 把字符串或布尔值转换为数字的转换函数
  97 + * parseInt
  98 + parseInt(param1, param2) 参数2用来指定基数
  99 + * parseFloat
  100 +* 函数IsFinite测试一个变量的值是否是无穷大
  101 +如果是无穷大(infinity)或NaN,函数返回false,否则返回true
  102 +
  103 +**null和undefined**
  104 +null(空):没有被定义,也没有被赋值过
  105 +undefined(未定义):声明过,但没有初始化过这个变量
  106 +函数isNaN专门用来测试一个变量是否是NaN
  107 +
  108 +### 4.常量
  109 +关键字const被用来创建一个JavaScript常量:
  110 +`const CURRENT_MONTH = 3.5;`
  111 +不能在常量定义之后对它进行赋值或重赋值
  112 +
  113 +
  114 +
  115 +### Tips
  116 +在定义任何变量时,无论是全局变量还是局部变量,都要使用关键字var
  117 +
  118 +----
  119 +
  120 +## 三、运算符和语句
  121 +###1.JavaScript语句的格式
  122 +JavaScript语句通常以分号结尾,在某些情况下换行符也能结尾。**显式地以分号结束一个JavaScript语句,无论这是否必要
  123 +
  124 +###2.简单语句
  125 +
  126 +----
  127 +## 四、JavaScript对象
  128 +###1.Number对象
  129 +四个常量属性
  130 +
  131 +- Number.MAX_VALUE
  132 +- Number.MIN_VALUE
  133 +- Number.NEGATIVE_INFINITY
  134 +- Number.NEGATIVE_INFINITY
  135 +
  136 +几个方法
  137 +
  138 +- NumberObject.toExponential(num)
  139 +把对象的值转换成指数计数法。
  140 +**num** 必需。规定指数计数法中的小数位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围。如果省略了该参数,将使用尽可能多的数字。
  141 +- NumberObject.toPrecision(num)
  142 +在对象的值超出指定位数时将其转换为指数计数法。
  143 +**num** 必需。规定必须被转换为指数计数法的最小位数。该参数是 1 ~ 21 之间(且包括 1 和 21)的值。有效实现允许有选择地支持更大或更小的 num。如果省略了该参数,则调用方法toString(),而不是把数字转换成十进制的值。
  144 +- NumberObject.toFixed(num)
  145 +把 Number 四舍五入为指定小数位数的数字。
  146 +**num** 必需。规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围。如果省略了该参数,将用 0 代替。
  147 +
  148 +
  149 +
  150 +
  151 +
  152 +
  153 +
  154 +