Javascript基础-运算符优先级/数字/字符串/数组/对象

97 阅读7分钟

✊不积跬步,无以至千里;不积小流,无以成江海。

运算符的结合性与优先级

结合性定义了当多个相同优先级的运算符出现时,它们是从左往右结合还是从右往左结合。优先级定义了运算符的执行顺序,具有高优先级的运算符会在低优先级的运算符之前执行。

以下是一些常见的JavaScript运算符的结合性和优先级:

  • 结合性为从左往右的运算符:

    • 赋值运算符(=、+=、-=等)
    • 逻辑运算符(&&、||)
    • 算术运算符(+、-、*、/等)
    • 比较运算符(==、!=、<、>等)
  • 结合性为从右往左的运算符:

    • 三元条件运算符(?:)
  • 结合性既可以从左往右也可以从右往左的运算符:

    • 指数运算符(**)

具有高优先级的运算符会在低优先级的运算符之前执行。以下是一些常见运算符的优先级(从高到低):

  • 指数运算符(**)
  • 一元运算符(++、--、+、-、!等)
  • 乘法运算符(*、/、%)
  • 加法运算符(+、-)
  • 关系运算符(<、<=、>、>=)
  • 相等性运算符(==、!=、===、!==)
  • 逻辑与运算符(&&)
  • 逻辑或运算符(||)
  • 条件运算符(?:)
  • 赋值运算符(=、+=、-=等)

数字的日常用法

常见的JavaScript数字的日常用法:

  1. 基本数学运算:JavaScript中的数字可以用于执行基本的数学运算,如加法、减法、乘法和除法。例如:
var a = 5;
var b = 3;

var sum = a + b; // 加法
var difference = a - b; // 减法
var product = a * b; // 乘法
var quotient = a / b; // 除法
  1. 比较和逻辑运算:数字可以与其他数字进行比较,并使用比较运算符(如大于、小于、等于等)进行逻辑运算。例如:
var a = 5;
var b = 3;

var greaterThan = a > b; // 大于
var lessThan = a < b; // 小于
var equalTo = a === b; // 等于
var logicalAnd = (a > 0) && (b > 0); // 逻辑与
var logicalOr = (a > 0) || (b > 0); // 逻辑或
  1. 数字格式化:通过使用内置的方法和函数,可以对数字进行格式化,如保留小数位数、转换为字符串等。例如
var num = 3.14159;

var rounded = num.toFixed(2); // 保留两位小数
var convertedToString = num.toString(); // 转换为字符串
  1. 随机数生成:使用内置的Math对象,可以生成随机数。例如:
var randomNumber = Math.random(); // 生成0到1之间的随机数
var randomInteger = Math.floor(Math.random() * 10); // 生成0到9之间的随机整数
  1. 数字处理和计算:JavaScript提供了许多内置的数学函数和方法,用于处理和计算数字。例如:
var absoluteValue = Math.abs(-5); // 绝对值
var squareRoot = Math.sqrt(25); // 平方根
var power = Math.pow(2, 3); // 幂运算

字符串声明方式

在JavaScript中,可以使用单引号(')或双引号(")来声明字符串。

  1. 使用单引号声明字符串:
var str1 = 'Hello, World!';
  1. 使用双引号声明字符串:
var str2 = "Hello, World!";

这两种方式在声明字符串时是等效的。

除了上述方式外,JavaScript还提供了使用反引号(`)声明模板字符串的功能。模板字符串提供了更灵活的字符串操作,可以包含变量和表达式。以下是使用反引号声明模板字符串的示例:

var name = 'John';
var age = 30;

var str3 = `My name is ${name} and I'm ${age} years old.`;

${name}${age}是使用${}语法嵌入在模板字符串中的变量和表达式。这样可以方便地在字符串中插入动态内容。

字符串的访问和拼接

在JavaScript中,可以使用索引和拼接操作来访问和拼接字符串。

  1. 字符串访问(索引):
    字符串中的每个字符都有一个索引,从0开始递增。可以使用方括号([])加索引的方式访问字符串中的特定字符。例如:
var str = "Hello, World!";
var firstCharacter = str[0]; // 访问第一个字符,结果为 "H"
var sixthCharacter = str[6]; // 访问第七个字符,结果为 ","
  1. 字符串拼接:
    字符串拼接是将多个字符串连接在一起形成一个新的字符串。在JavaScript中,可以使用加号(+)运算符或模板字符串来进行字符串拼接。例如:
var str1 = "Hello";
var str2 = "World";
var result1 = str1 + ", " + str2; // 使用加号进行字符串拼接,结果为 "Hello, World"

var name = "John";
var age = 30;
var result2 = `My name is ${name} and I'm ${age} years old.`; // 使用模板字符串进行字符串拼接,结果为 "My name is John and I'm 30 years old."

字符串查找和截取

  1. 字符串查找:

    • indexOf(searchValue[, startIndex]):返回指定字符串在原字符串中第一次出现的索引位置。如果未找到,则返回 -1。可以通过可选的 startIndex 参数指定开始搜索的索引位置。
    • lastIndexOf(searchValue[, startIndex]):返回指定字符串在原字符串中最后一次出现的索引位置。如果未找到,则返回 -1。可以通过可选的 startIndex 参数指定开始搜索的索引位置。
    • includes(searchValue):判断原字符串是否包含指定的字符串。返回布尔值。
var str = "Hello, World!";
console.log(str.indexOf("o")); // 输出 4
console.log(str.lastIndexOf("o")); // 输出 8
console.log(str.includes("World")); // 输出 true
  1. 字符串截取:

    • slice(startIndex[, endIndex]):返回从 startIndex 到 endIndex(不包括)之间的子字符串。如果省略 endIndex 参数,则截取至字符串末尾。
    • substring(startIndex[, endIndex]):返回从 startIndex 到 endIndex(不包括)之间的子字符串。如果省略 endIndex 参数,则截取至字符串末尾。与 slice() 方法不同的是,substring() 不支持负数索引。
    • substr(startIndex[, length]):返回从 startIndex 开始的指定长度的子字符串。如果省略 length 参数,则截取至字符串末尾。
var str = "Hello, World!";
console.log(str.slice(7)); // 输出 "World!"
console.log(str.slice(7, 12)); // 输出 "World"
console.log(str.substring(7)); // 输出 "World!"
console.log(str.substring(7, 12)); // 输出 "World"
console.log(str.substr(7)); // 输出 "World!"
console.log(str.substr(7, 5)); // 输出 "World"

substr和substring的区别

var str = "Hello, World!";
console.log(str.substr(7, 5)); // 输出 "World",从索引位置 7 开始,截取长度为 5 的子字符串
console.log(str.substring(7, 12)); // 输出 "World",从索引位置 712(不包括 12)之间的子字符串

console.log(str.substr(-6, 5)); // 输出 "World",从倒数第 6 个字符开始,截取长度为 5 的子字符串
console.log(str.substring(-6, -1)); // 输出 "Hello",负数参数会被当作 0,相当于截取从索引位置 0-1 之间的子字符串

总结:substr() 方法使用起始索引和长度来确定截取的子字符串,而 substring() 方法使用起始索引和结束索引(不包括该位置的字符)来确定截取的子字符串。此外,substr() 方法允许使用负数索引,而 substring() 方法将负数索引视为 0。

数组定义、访问、长度

数组的定义:

  • 使用方括号([])来定义一个空数组:
var arr = [];
  • 在方括号中使用逗号分隔的值来定义一个带有初始元素的数组:
var arr = [1, 2, 3, 4, 5];

数组的访问:

  • 使用索引访问数组的元素。数组的索引从0开始,依次递增。例如,要访问数组的第一个元素,可以使用索引0:
var arr = [1, 2, 3, 4, 5];
console.log(arr[0]); // 输出 1

数组的长度:

  • 使用length属性获取数组的长度,即数组中元素的个数:
var arr = [1, 2, 3, 4, 5];
console.log(arr.length); // 输出 5
  • 注意,length属性返回的是数组的长度,即元素的个数,并不是最后一个元素的索引加1。如果数组中存在空洞(未定义的元素),length属性仍然会计算这些空洞,而不是跳过它们。

  • 修改数组的length属性可以改变数组的长度。如果将length属性设置为小于数组当前长度的值,数组将被截断,多余的元素将被删除。如果将length属性设置为大于数组当前长度的值,数组将被扩展,新增的元素将被赋值为undefined

var arr = [1, 2, 3, 4, 5];
arr.length = 3; // 数组被截断,只保留前3个元素
console.log(arr); // 输出 [1, 2, 3]

arr.length = 7; // 数组被扩展,新增的元素为 undefined
console.log(arr); // 输出 [1, 2, 3, undefined, undefined, undefined, undefined]

对象基础

在 JavaScript 中,对象是一种复合数据类型,用于存储键值对(属性和值)的集合。对象可以通过对象字面量 {} 或通过构造函数创建。

以下是对象基础的一些概念和用法:

  1. 对象的创建:

    • 使用对象字面量 {} 来创建空对象:
var obj = {};

- 使用对象字面量来创建带有属性和初始值的对象:

var person = {
  name: "John",
  age: 30,
  city: "New York"
};

- 使用构造函数创建对象:

var obj = new Object();
  1. 对象的属性访问:

    • 使用点语法(.)来访问对象的属性:
var name = person.name; // 访问对象 person 的 name 属性

- 使用方括号语法 `[]` 来访问对象的属性,可以使用变量或字符串表示属性名:

var age = person["age"]; // 访问对象 person 的 age 属性
var propertyName = "city";
var city = person[propertyName]; // 使用变量作为属性名访问对象的属性
  1. 对象的属性赋值和新增属性:

    • 使用点语法或方括号语法来对已存在的属性赋值:
person.name = "Jane"; // 将对象 person 的 name 属性赋值为 "Jane"
person["age"] = 35; // 将对象 person 的 age 属性赋值为 35

- 使用点语法或方括号语法来新增属性:

person.gender = "Male"; // 添加新属性 gender
person["occupation"] = "Engineer"; // 添加新属性 occupation
  1. 对象的属性删除:

    • 使用 delete 关键字来删除对象的属性:
delete person.city; // 删除对象 person 的 city 属性
  1. 对象的遍历:

    • 使用 for...in 循环遍历对象的属性:
for (var key in person) {
  console.log(key + ": " + person[key]);
}

- 使用 `Object.keys()` 方法获取对象的所有属性,并进行遍历:

var keys = Object.keys(person);
for (var i = 0; i < keys.length; i++) {
  var key = keys[i];
  console.log(key + ": " + person[key]);
}