1-js基础
JavaScript 使用
一般使用外部脚本。如需使用外部脚本,请在 <script>
标签的 src (source) 属性中设置脚本的名称:
1 | <script src="myScript.js"></script> |
JavaScript 输出
JavaScript 能够以不同方式“显示”数据:
- 使用 window.alert() 写入警告框
- 使用 document.write() 写入 HTML 输出
- 使用 innerHTML 写入 HTML 元素
- 使用 console.log() 写入浏览器控制台
window.alert()
1 | <h1>我的第一张网页</h1> |
JavaScript语句
关键词 | 用途 |
---|---|
var | 声明变量 |
function | 声明函数 |
try…catch | 对语句块实现错误处理 |
双斜杠 //
或/*
与 */
*之间的代码被视为注释。( 注释块常用于官方声明 )
变量命名规则:在 JavaScript 中,变量首字符必须是字母、下划线(-)或美元符号($)。 数值不可以作为首字符。这样,JavaScript 就能轻松区分标识符和数值。一般更倾向于使用以小写字母开头的驼峰大小写:
1 | firstName, lastName, masterCard, interCity |
Js对大小写敏感。
JavaScript 使用 Unicode 字符集。
运算:与c语言相同(except:**
表示幂, x ** y
产生的结果与 Math.pow(x,y)
相同 )
优先级:
值 | 运算符 | 描述 | 实例 |
---|---|---|---|
20 | ( ) | 表达式分组 | (3 + 4) |
19 | . | 成员 | person.name |
19 | [] | 成员 | person[“name”] |
19 | () | 函数调用 | myFunction() |
19 | new | 创建 | new Date() |
17 | ++ | 后缀递增 | i++ |
17 | – | 后缀递减 | i– |
16 | ++ | 前缀递增 | ++i |
16 | – | 前缀递减 | –i |
16 | ! | 逻辑否 | !(x==y) |
16 | typeof | 类型 | typeof x |
15 | ** | 求幂 (ES7) | 10 ** 2 |
14 | * | 乘 | 10 * 5 |
14 | / | 除 | 10 / 5 |
14 | % | 模数除法 | 10 % 5 |
13 | + | 加 | 10 + 5 |
13 | - | 减 | 10 - 5 |
12 | << | 左位移 | x << 2 |
12 | >> | 右位移 | x >> 2 |
12 | >>> | 右位移(无符号) | x >>> 2 |
11 | < | 小于 | x < y |
11 | <= | 小于或等于 | x <= y |
11 | > | 大于 | x > y |
11 | >= | 大于或等于 | x >= y |
11 | in | 对象中的属性 | “PI” in Math |
11 | instanceof | 对象的实例 | instanceof Array |
10 | == | 相等 | x == y |
10 | === | 严格相等 | x === y |
10 | != | 不相等 | x != y |
10 | !== | 严格不相等 | x !== y |
9 | & | 按位与 | x & y |
8 | ^ | 按位 XOR | x ^ y |
7 | | | 按位或 | x | y |
6 | && | 逻辑与 | x && y |
5 | || | 逻辑否 | x || y |
4 | ? : | 条件 | ? “Yes” : “No” |
3 | = | 赋值 | x = y |
3 | += | 赋值 | x += y |
3 | -= | 赋值 | x -= y |
3 | *= | 赋值 | x *= y |
3 | %= | 赋值 | x %= y |
3 | <<= | 赋值 | x <<= y |
3 | >>= | 赋值 | x >>= y |
3 | >>>= | 赋值 | x >>>= y |
3 | &= | 赋值 | x &= y |
3 | ^= | 赋值 | x ^= y |
3 | |= | 赋值 | x |= y |
2 | yield | 暂停函数 | yield x |
1 | , | 逗号 | 7 , 8 |
JavaScript 数据类型
JavaScript 变量能够保存多种数据类型:数值、字符串值、数组、对象等等:
1 | var length = 7; // 数字 |
当数值和字符串相加时,JavaScript 将把数值视作字符串。
1 | var x = 911 + 7 + "Porsche"; //918Porsche |
JavaScript 拥有动态类型。这意味着相同变量可用作不同类型:
1 | var x = 7; // 现在 x 是数值 |
可以在字符串内使用引号,只要这些引号与包围字符串的引号不匹配:
1 | var answer = "He is called 'Bill'"; // 双引号内的单引号 |
科学计数法表示数:
1 | var y = 123e5; // 12300000 |
布尔值:
1 | var x = true; |
typeof
可使用 JavaScript 的 typeof 来确定 JavaScript 变量的类型:
1 | document.getElementById('demo').innerHTML = |
Undefined 与 null 的值相等,但类型不相等:
1 | null === undefined // false |
对于复杂数据:
typeof
运算符把对象、数组或 null 返回 object。 把函数返回 function 。
1 | typeof {name:'Bill', age:62} // 返回 "object" |
JavaScript字符串
内建属性 length 可返回字符串的长度
1 | var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; |
字符串换行
1 | document.getElementById("demo").innerHTML = "Hello \ |
不要把字符串创建为对象。它会拖慢执行速度。
1 | var x = "Bill"; // typeof x 将返回 string |
查找字符串
indexOf()
方法返回字符串中指定文本首次出现的索引(位置) 。lastIndexOf()
方法返回指定文本在字符串中最后一次出现的索引
1 | var str = "The full name of China is the People's Republic of China."; |
如果未找到文本, indexOf()
和 lastIndexOf()
均返回 -1。
- search() 方法无法设置第二个开始位置参数。
- indexOf() 方法无法设置更强大的搜索值(正则表达式)。
提取部分字符串
slice(start, end)
1 | var str = "Apple, Banana, Mango"; |
substring(start, end)
类似于slice()
,只是无法接受负数索引。
substr(start, length)
1 | var str = "Apple, Banana, Mango"; |
替换字符串内容
1 | str = "Please visit Microsoft and Microsoft!"; |
replace()
对大小写敏感。 如需执行大小写不敏感的替换,使用正则表达式 /i
(大小写不敏感) :
1 | str = "Please visit Microsoft and Microsoft!"; |
转换为大写和小写
1 | var text1 = "Hello World!"; // 字符串 |
连接字符串
1 | var text = "Hello" + " " + "World!"; |
删除字符串两端的空白符
1 | var str = " Hello World! "; |
返回字符串中指定下标(位置)的字符串
1 | var str = "HELLO WORLD"; |
charCodeAt() 方法返回字符串中指定索引的字符 unicode 编码:
1 | var str = "HELLO WORLD"; |
把字符串转换为数组
1 | var txt = "Hello"; // 字符串 |
JavaScript数字
JavaScript 数值始终以双精度浮点数来存储,其中 0 到 51 存储数字(片段),52 到 62 存储指数,63 位存储符号:
值(aka Fraction/Mantissa) | 指数 | 符号 |
---|---|---|
52 bits(0 - 51) | 11 bits (52 - 62) | 1 bit (63) |
精度
整数(不使用指数或科学计数法)会被精确到 15 位。
1 | var x = 999999999999999; // x 将是 999999999999999 |
小数的最大数是 17 位,但是浮点的算数并不总是 100% 精准:
1 | var x = 0.2 + 0.1; // x 将是 0.30000000000000004 |
在所有数字运算中,JavaScript 会尝试将字符串转换为数字:
1 | var x = "100"; |
可使用全局 JavaScript 函数 isNaN() 来确定某个值是否是数:
1 | var x = 100 / "Apple"; |
假如在数学运算中使用了 NaN
,则结果也将是 NaN
1 | typeof NaN; // 返回 "number" |
Infinity
Infinity
(或 -Infinity
)是 JavaScript 在计算数时超出最大可能数范围时返回的值。
1 | while (myNumber != Infinity) { // 执行直到 Infinity |
进制
JavaScript 会把前缀为 0x 的数值常量解释为十六进制。
1 | var x = 0xFF; // x 将是 255 (8个1) |
使用 toString()
方法把数输出为不同的进制:
1 | myNumber.toString(8); // 返回 200 |
数值不要使用new()
toExponential() 方法
toExponential() 返回字符串值,它包含已被四舍五入并使用指数计数法的数字。
参数定义小数点后的字符数:( 该参数是可选的。如果您没有设置它,JavaScript 不会对数字进行舍入。)
1 | var x = 9.656; |
toFixed()
方法
toFixed()
返回字符串值,它包含了指定位数小数的数字:
1 | var x = 9.656; |
toPrecision() 方法
toPrecision()
返回字符串值,它包含了指定长度的数字:
1 | var x = 9.656; |
全局方法
方法 | 描述 |
---|---|
Number() | 返回数字,由其参数转换而来。如果无法转换数字,则返回 NaN 。 |
parseFloat() | 解析其参数并返回浮点数。允许空格。只返回首个数字 |
parseInt() | 解析其参数并返回整数。允许空格。只返回首个数字 |
1 | Number(new Date("2019-04-15")); // 返回 1506729600000 (1970 年 1 月 1 日至今的毫秒数。) |
JavaScript 数组
1 | var cars = [ |
可通过引用数组名来访问完整数组:
1 | var cars = ["Saab", "Volvo", "BMW"]; |
数组是一种特殊类型的对象。在 JavaScript 中对数组使用 typeof
运算符会返回 “object”。
因此,数组中可以存放不同类型的变量。可以在数组中保持对象、保存函数、保存数组。
1 | myArray[0] = Date.now; |
数组属性和方法
数组长度
1 | var fruits = ["Banana", "Orange", "Apple", "Mango"]; |
添加数组元素 && 删除元素
1 | fruits.pop(); // 从 fruits 删除最后一个元素("Mango") |
在 JavaScript 中,数组使用数字索引。对象使用命名索引。
- 如果希望元素名为字符串(文本)则应该使用对象。
- 如果希望元素名为数字则应该使用数组。
拼接数组
1 | var fruits = ["Banana", "Orange", "Apple", "Mango"]; |
concat()
方法通过合并(连接)现有数组来创建一个新数组
1 | var arr1 = ["Cecilie", "Lone"]; |
slice()
方法用数组的某个片段切出新数组 ( slice()
方法创建新数组。它不会从源数组中删除任何元素。 )
1 | var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"]; |
鉴别数组
1 | Array.isArray(fruits); // 如果是数组,返回 true |
把数组转换为字符串
方法toString()
把数组转换为数组值(逗号分隔)的字符串
1 | var fruits = ["Banana", "Orange", "Apple", "Mango"]; |
join()
方法也可将所有数组元素结合为一个字符串,还可以规定分隔符。
1 | document.getElementById("demo").innerHTML = fruits.join(" * "); |
数组排序
默认地,sort()
函数按照字符串顺序对值进行排序
1 | var points = [40, 100, 1, 5, 25, 10]; |
反转数组
1 | fruits.reverse(); // 反转元素顺序 |
数组迭代
Array.forEach()
该方法为每个数组元素调用一次函数(回调函数)。
1 | var txt = ""; |
Array.map()
map() 方法通过对每个数组元素执行函数来创建新数组。
map() 方法不会对没有值的数组元素执行函数。
map() 方法不会更改原始数组。
1 | var numbers1 = [45, 4, 9, 16, 25]; |
Array.filter()
创建一个包含通过测试的数组元素的新数组
1 | var numbers = [45, 4, 9, 16, 25]; |
Array.indexOf()
在数组中搜索元素值并返回其位置( 第一个项目的位置是 0 )
1 | // array.indexOf(item, start),未找到返回-1 |
Array.lastIndexOf()
是从数组结尾开始搜索
1 | array.lastIndexOf(item, start) //start可选。从哪里开始搜索。负值将从结尾开始的给定位置开始,并搜索到开头。 |
Array.find()
返回通过测试函数的第一个数组元素的值
1 | var numbers = [4, 9, 16, 25, 29]; |
Array.findIndex()
返回通过测试函数的第一个数组元素的索引。
1 | var numbers = [4, 9, 16, 25, 29]; |
JavaScript 函数
1 | function myFunction(p1, p2) { |
函数中的代码将在其他代码调用该函数时执行:
- 当事件发生时(当用户点击按钮时)
- 当 JavaScript 代码调用时
- 自动的(自调用)
myFunction
引用的是函数对象,而myFunction()
引用的是函数结果。
在函数内部声明的变量,是函数的局部变量。
JavaScript对象
1 | var person = { |
能够以两种方式访问属性:
1 | objectName.propertyName |
如果通过关键词 “new” 来声明 JavaScript 变量,则该变量会被创建为对象:
1 | var x = new String(); // 把 x 声明为 String 对象 |
请避免字符串、数值或逻辑对象。他们会增加代码的复杂性并降低执行速度。
JavaScript 事件
HTML事件 | 描述 |
---|---|
onchange | HTML 元素已被改变 |
onclick | 用户点击了 HTML 元素 |
onmouseover | 用户把鼠标移动到 HTML 元素上 |
onmouseout | 用户把鼠标移开 HTML 元素 |
onkeydown | 用户按下键盘按键 |
onload | 浏览器已经完成页面加载 |
JavaScript 循环
for/in
语句
1 | var person = {fname:"Bill", lname:"Gates", age:62}; |
JavaScript 标签
如需标记 JavaScript 语句,请将标签名和冒号置于语句之前:
1 | label: |
break 和 continue 语句是仅有的可“跳出”代码块的 JavaScript 语句。
1 | break labelname; // 如果有标签引用,则 break 语句可用于跳出任意代码块 |
1 | var cars = ["BMW", "Volvo", "Saab", "Ford"]; |