JavaScript(二)——数据类型,函数,数组,字符串

简介: (1) 数据类型JavaScript 变量能够保存多种数据类型:数值、字符串值、数组、对象等等:

@TOC

一、数据类型

(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. 数组定义

数组是一个特殊的变量,他能够一次存放一个以上的值

  1. 创建数组(两种方法)

(1)

var array-name = [item1, item2, ...];

(2)使用 JavaScript 关键词 new

var cars = new Array("Saab", "Volvo", "BMW");
  1. 访问数组元素

引用索引号(下标号)来引用某个数组元素

访问 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];
  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};
  1. 可以在数组中保存对象,保存函数,保存数组
myArray[0] = Date.now;
myArray[1] = myFunction;
myArray[2] = myCars;
  1. length 属性

length 属性返回数组的长度(数组元素的数目)。

例:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.length;                       // fruits 的长度是 4

length 属性始终大于最高数组索引(下标)。

  1. 遍历数组元素

(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. 添加数组元素

(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)
  1. 关联数组

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);
  1. 如果省略第二个参数,则该 substr() 将裁剪字符串的剩余部分。
  2. 如果首个参数为负,则从字符串的结尾计算位置。
  3. 第二个参数不能为负,因为它定义的是长度。

(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] 中的整个字符串。

如果分隔符是 "",被返回的数组将是间隔单个字符的数组:

目录
相关文章
|
14天前
|
存储 JavaScript 索引
JS中数组的相关方法介绍
JS中数组的相关方法介绍
|
14天前
|
JavaScript Java
JS有趣的灵魂 清空数组
JS有趣的灵魂 清空数组
|
14天前
|
JavaScript
JS 获取对象数据类型的键值对的键与值
JS 获取对象数据类型的键值对的键与值
|
14天前
|
JavaScript 前端开发 索引
JavaScript中与字符串相关的方法
JavaScript中与字符串相关的方法
|
1天前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
11 3
|
1天前
|
JavaScript 前端开发
js开发:请解释什么是ES6的Generator函数,以及它的用途。
ES6的Generator函数是暂停/恢复功能的特殊函数,利用yield返回多个值,适用于异步编程和流处理,解决了回调地狱问题。例如,一个简单的Generator函数可以这样表示: ```javascript function* generator() { yield &#39;Hello&#39;; yield &#39;World&#39;; } ``` 创建实例后,通过`.next()`逐次输出&quot;Hello&quot;和&quot;World&quot;,展示其暂停和恢复的特性。
9 0
|
7天前
|
JavaScript 前端开发
js字符串拼接
js字符串拼接
|
7天前
|
JavaScript 前端开发 索引
JavaScript 数组中的增、删、改、查
JavaScript 数组中的增、删、改、查
|
7天前
|
JavaScript 前端开发
js数据类型有几类?一共有几种?判断数据类型的方法是什么?
js数据类型有几类?一共有几种?判断数据类型的方法是什么?
|
8天前
|
缓存 JavaScript 前端开发
js的入口函数,入口函数的作用
js的入口函数,入口函数的作用
14 4