一、数据类型
(1) 数据类型
JavaScript 变量能够保存多种数据类型:数值、字符串值、数组、对象等等:
var length = 7; // 数字
var lastName = "Gates"; // 字符串
var cars = ["Porsche", "Volvo", "BMW"]; // 数组
var x = {firstName:"Bill", lastName:"Gates"}; // 对象
(2) JavaScript 数值
- JavaScript 只有一种数值类型。
写数值时用不用小数点均可:
- 超大或超小的数值可以用科学计数法来写:
(3)
JavaScript 布尔值
布尔值只有两个值:true 或 false。
(4) JavaScript 数组
注意:JavaScript 数组用方括号书写。 数组的项目由逗号分隔
数组索引基于零,这意味着第一个项目是 [0],第二个项目是 [1],以此类推。
(5)JavaScript 对象
JavaScript 对象用花括号
来书写. 对象属性是 name:value 对,由逗号分隔。
(6)Undefined和Null
Undefined
在 JavaScript 中,没有值的变量,其值是 undefined。typeof 也返回 undefined。
Null
在 JavaScript 中,null 是 "nothing"。它被看做不存在的事物。
在 JavaScript 中,null 的数据类型是对象。
- 可以把 null 在 JavaScript 中是对象理解为一个 bug。它本应是 null。
- 可以通过设置值为 null 清空对象:
- 可以通过设置值为 undefined 清空对象:
Undefined 与 Null 的区别
Undefined 与 null 的值相等,但类型不相等:
(7)原始数据( 原始数据值是一种没有额外属性和方法的单一简单数据值。)
typeof 运算符可返回以下原始类型之一:
- string
- number
- boolean
- undefined
二、函数
JavaScript 函数是被设计为执行特定任务的代码块。
JavaScript 函数会在某代码调用它时被执行。
(1)函数语法
JavaScript 函数通过 function
关键词进行定义,其后是函数名和括号 ()。
函数名可包含字母、数字、下划线和美元符号(规则与变量名相同)。
圆括号可包括由逗号分隔的参数
function name(参数 1, 参数 2, 参数 3) {
要执行的代码
}
(2)函数调用
函数中的代码将在其他代码调用该函数时执行:
重点:
- 当事件发生时(当用户点击按钮时)
- 当 JavaScript 代码调用时
- 自动的(自调用)
(3)函数返回
当 JavaScript 到达 return
语句,函数将停止执行。
如果函数被某条语句调用,JavaScript 将在调用语句之后“返回”执行代码。
函数通常会计算出返回值。这个返回值会返回给调用者
例:
var x = myFunction(7, 8); // 调用函数,返回值被赋值给 x
function myFunction(a, b) {
return a * b; // 函数返回 a 和 b 的乘积
}
(4)() 运算符调用函数
使用上面的例子,toCelsius 引用的是函数对象,而 toCelsius() 引用的是函数结果
(5)局部变量
在 JavaScript 函数中声明的变量,会成为函数的局部变量。
局部变量只能在函数内访问。
例:
// 此处的代码不能使用 carName
function myFunction() {
var carName = "Volvo";
// code here CAN use carName
}
// 此处的代码可以使用 carName
三、数组
JavaScript 数组用于在单一变量中存储多个值。
- 数组定义
数组是一个特殊的变量,他能够一次存放一个以上的值
- 创建数组(两种方法)
(1)
var array-name = [item1, item2, ...];
(2)使用 JavaScript 关键词 new
var cars = new Array("Saab", "Volvo", "BMW");
- 访问数组元素
引用索引号(下标号)
来引用某个数组元素
访问 cars 中的首个元素的值:
var name = cars[0];
这条语句修改 cars 中的首个元素:
cars[0] = "Opel"
- 访问第一个元素
fruits = ["Banana", "Orange", "Apple", "Mango"];
var first = fruits[0];
- 访问最后一个元素
fruits = ["Banana", "Orange", "Apple", "Mango"];
var last = fruits[fruits.length - 1];
- 数组是对象
在 JavaScript 中对数组使用 typeof 运算符会返回 "object"。
(1)数组使用数字来访问其“元素”。
在本例中,person[0] 返回 Bill:
var person = ["Bill", "Gates", 62];
(2)对象使用名称来访问其“成员”。
在本例中,person.firstName 返回 Bill:
var person = {firstName:"John", lastName:"Doe", age:46};
- 可以在数组中保存对象,保存函数,保存数组
myArray[0] = Date.now;
myArray[1] = myFunction;
myArray[2] = myCars;
- length 属性
length 属性返回数组的长度(数组元素的数目)。
例:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.length; // fruits 的长度是 4
length 属性始终大于最高数组索引(下标)。
- 遍历数组元素
(1)遍历数组的最安全方法是使用 "for" 循环:
var fruits, text, fLen, i;
fruits = ["Banana", "Orange", "Apple", "Mango"];
fLen = fruits.length;
text = "<ul>";
for (i = 0; i < fLen; i++) {
text += "<li>" + fruits[i] + "</li>";
}
text += "</ul>";
document.getElementById("demo").innerHTML = text;
(2)可以使用 Array.foreach() 函数:
var fruits, text;
fruits = ["Banana", "Orange", "Apple", "Mango"];
text = "<ul>";
fruits.forEach(myFunction);
text += "</ul>";
document.getElementById("demo").innerHTML = text;
function myFunction(value) {
text += "<li>" + value + "</li>";
}
- 添加数组元素
(1)向数组添加新元素的最佳方法是使用 push() 方法:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push("Lemon");
(2)以使用 length 属性向数组添加新元素:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits[fruits.length] = "Lemon"; // 向 fruits 添加一个新元素 (Lemon)
- 关联数组
JavaScript 不支持命名索引的数组。
在 JavaScript 中,数组只能使用数字索引
。
警告!
若使用命名索引,JavaScript 会把数组重定义为标准对象。
之后,所有数组的方法和属性将产生非正确结果。
var x = person.length; // person.length 将返回 0
var y = person[0]; // person[0] 将返回 undefined
数组和对象的区别
- 在 JavaScript 中,数组使用数字索引。
- 在 JavaScript 中,对象使用命名索引。
如何识别数组?
问题在于 JavaScript 运算符 typeof 返回 "object":
(1) Array.isArray():
Array.isArray(fruits); // 返回 true
(2)创建您自己的 isArray() 函数以解决此问题:
function isArray(x) {
return x.constructor.toString().indexOf("Array") > -1;
}
假如参数为数组,则上面的函数始终返回 true。
或者更准确的解释是:假如对象原型包含单词 "Array" 则返回 true。
(3)假如对象由给定的构造器创建,则 instanceof 运算符返回 true:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits instanceof Array // 返回 true
四、字符串
JavaScript 字符串用于存储和操作文本
。
(1)字符串长度
内建属性 length 可返回字符串的长度:
var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var sln = txt.length;
(2)特殊字符
由于字符串必须由引号包围,JavaScript 会误解这段字符串:
避免此问题的解决方法是,使用 \ 转义字符
。
反斜杠转义字符把特殊字符转换为字符串字符:
代码 | 结果 | 描述 |
---|---|---|
\' | ' | 单引号 |
\" | " | 双引号 |
\ | \ | 反斜杠 |
(3)其他六个 JavaScript 中有效的转义序列:
代码 | 结果 |
---|---|
\b | 退格键 |
\f | 换页 |
\n | 新行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
五、字符串方法
(1)查找字符串中的字符串
indexOf() 方法返回字符串中指定文本首次出现的索引(位置):
例
var str = "The full name of China is the People's Republic of
China.";
var pos = str.indexOf("China");
(2)JavaScript 从零计算位置。
0 是字符串中的第一个位置,1 是第二个,2 是第三个 ...
lastIndexOf() 方法返回指定文本在字符串中最后一次
出现的索引:
如果未找到文本, indexOf() 和 lastIndexOf() 均返回 -1
。
两种方法都接受作为检索起始位置的第二个参数。
var str = "The full name of China is the People's Republic of
China.";
var pos = str.indexOf("China", 18);
- lastIndexOf() 方法向后进行检索(从尾到头),这意味着:假如第二个参数是 50,则从位置 50 开始检索,直到字符串的起点。
(3)检索字符串中的字符串
search() 方法搜索特定值的字符串,并返回匹配的位置:
var str = "The full name of China is the People's Republic of
China.";
var pos = str.search("locate");
区别在于:
- search() 方法无法设置第二个开始位置参数。
- indexOf() 方法无法设置更强大的搜索值(正则表达式)
(4)提取部分字符串
slice(start, end)
slice() 提取字符串的某个部分并在新字符串中返回被提取的部分。
该方法设置两个参数:起始索引(开始位置),终止索引(结束位置)
。var str = "Apple, Banana, Mango"; var res = str.slice(7,13);
如果某个参数为负,则从字符串的结尾开始计数。
如果省略第二个参数,则该方法
将裁剪字符串的剩余部分
- substring(start, end)
substring() 无法接受负的索引
。
如果省略第二个参数,则该 substring() 将裁剪字符串的剩余部分。
- substr(start, length)
substr() 类似于 slice()。
不同之处
在于第二个参数规定被提取部分的长度。
var str = "Apple, Banana, Mango";
var res = str.substr(7,6);
- 如果省略第二个参数,则该 substr() 将裁剪字符串的剩余部分。
- 如果首个参数为负,则从字符串的结尾计算位置。
- 第二个参数不能为负,因为它定义的是长度。
(5)替换字符串内容
- replace() 方法用另一个值替换在字符串中指定的值:
str = "Please visit Microsoft!";
var n = str.replace("Microsoft", "W3School");
- replace() 方法不会改变调用它的字符串。它返回的是新字符串。
默认地,replace() 只替换首个匹配
- 默认地,replace()
对大小写敏感
。因此不对匹配 MICROSOFT:
如需执行大小写不敏感替换,请使用正则表达式 /i(大小写不敏感):
str = "Please visit Microsoft!";
var n = str.replace(/MICROSOFT/i, "W3School");
注意: 正则表达式不带引号。
如需替换所有匹配,请使用正则表达式的 g 标志(用于全局搜索):
(6)转换为大写和小写
toUpperCase()
把字符串转换为大写:
var text1 = "Hello World!"; // 字符串
var text2 = text1.toUpperCase(); // text2 是被转换为大写的 text1
toLowerCase()
把字符串转换为小写:
var text1 = "Hello World!"; // 字符串
var text2 = text1.toLowerCase(); // text2 是被转换为小写的 text1
(7)concat() 方法
concat() 连接两个或多个字符串:
var text1 = "Hello";
var text2 = "World";
text3 = text1.concat(" ",text2);
concat() 方法可用于代替加运算符。
所有字符串方法都会返回新字符串。它们不会修改原始字符串。
字符串是不可变的:字符串不能更改,只能替换。
(8)String.trim()
trim() 方法删除字符串两端的空白符:
(9)提取字符串字符
- charAt()方法
charAt() 方法返回字符串中指定下标(位置)的字符串:
var str = "HELLO WORLD";
str.charAt(0); // 返回 H
- charCodeAt() 方法
charCodeAt() 方法返回字符串中指定索引的字符 unicode 编码:
var str = "HELLO WORLD";
str.charCodeAt(0); // 返回 72
(10)把字符串转换为数组
可以通过 split() 将字符串转换为数组:
var txt = "a,b,c,d,e"; // 字符串
txt.split(","); // 用逗号分隔
txt.split(" "); // 用空格分隔
txt.split("|"); // 用竖线分隔
如果省略分隔符,被返回的数组将包含 index [0] 中的整个字符串。
如果分隔符是 "",被返回的数组将是间隔单个字符的数组: