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

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

一、数据类型

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

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

目录
相关文章
|
13天前
|
JavaScript 前端开发 Java
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
本文介绍了JavaScript中常用的函数和方法,包括通用函数、Global对象函数以及数组相关函数。详细列出了每个函数的参数、返回值及使用说明,并提供了示例代码。文章强调了函数的学习应结合源码和实践,适合JavaScript初学者和进阶开发者参考。
25 2
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
|
12天前
|
前端开发 JavaScript 开发者
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。
|
26天前
|
JavaScript 前端开发
JavaScript 函数语法
JavaScript 函数是使用 `function` 关键词定义的代码块,可在调用时执行特定任务。函数可以无参或带参,参数用于传递值并在函数内部使用。函数调用可在事件触发时进行,如用户点击按钮。JavaScript 对大小写敏感,函数名和关键词必须严格匹配。示例中展示了如何通过不同参数调用函数以生成不同的输出。
|
28天前
|
存储 JavaScript 前端开发
JS函数提升 变量提升
【10月更文挑战第6天】函数提升和变量提升是 JavaScript 语言的重要特性,但它们也可能带来一些困惑和潜在的问题。通过深入理解和掌握它们的原理和表现,开发者可以更好地编写和维护 JavaScript 代码,避免因不了解这些机制而导致的错误和不一致。同时,不断提高对执行上下文等相关概念的认识,将有助于提升对 JavaScript 语言的整体理解和运用能力。
|
1月前
|
自然语言处理 前端开发 JavaScript
🛠️ JavaScript数组操作指南:20个精通必备技巧🚀
本文详细介绍了 JavaScript 中的 20 个高效数组操作技巧,涵盖了从基本的添加、移除元素,到数组转换和去重等高级操作。强调了不可变性的重要性,提供了清晰的代码示例,帮助开发者编写更整洁和高效的代码。无论是新手还是经验丰富的开发者,这些技巧都将显著提升您的编码能力,使您在项目中更具竞争力。
23 2
|
30天前
|
存储 JavaScript 前端开发
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
JavaScript 数据类型分为基本数据类型和引用数据类型。基本数据类型(如 string、number 等)具有不可变性,按值访问,存储在栈内存中。引用数据类型(如 Object、Array 等)存储在堆内存中,按引用访问,值是可变的。本文深入探讨了这两种数据类型的特性、存储方式、以及检测数据类型的两种常用方法——typeof 和 instanceof,帮助开发者更好地理解 JavaScript 内存模型和类型检测机制。
71 0
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
|
1月前
|
JavaScript 前端开发 测试技术
JS都有哪些操作数组的方法
JS都有哪些操作数组的方法
20 3
|
1月前
|
JavaScript 前端开发
js教程——函数
js教程——函数
32 4
|
1月前
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
31 1
|
1月前
|
存储 JavaScript 前端开发
js中函数、方法、对象的区别
js中函数、方法、对象的区别
16 2