目录

字符串

方法列表

代码示例

对象

方法列表

代码示例

集合(数组)

方法列表

代码示例

互相转换

将集合(数组或对象)转换为字符串

将字符串转换为集合(数组或对象)

注意事项

字符串

对象

集合(数组)

Vue 3 的 Composition API


字符串

方法列表

在 Vue.js 中,字符串操作通常不是由 Vue 自身提供的功能,而是直接使用 JavaScript 中的字符串方法。以下是一些常见的 JavaScript 字符串操作方法,这些方法在 Vue.js 中同样适用。

序号方法作用
1includes()检查字符串是否包含指定的子字符串。
2startsWith()检查字符串是否以指定的子字符串开始。
3endsWith()检查字符串是否以指定的子字符串结束。
4slice()提取字符串的某个部分并返回一个新字符串。
5substring()提取字符串之间的字符。
6substr()从起始索引号提取字符串中指定数目的字符。
7replace()替换字符串中指定的值。
8toUpperCase()将字符串转换为大写。
9toLowerCase()将字符串转换为小写。
10trim()去除字符串两端的空白字符。
11concat()连接两个或多个字符串。
12charAt()返回指定位置的字符。
13charCodeAt()返回指定位置的字符的 Unicode 编码。
14split()将字符串分割成字符串数组。

代码示例

在 Vue.js 中使用 JavaScript 字符串操作方法是相当直接的,因为 Vue.js 允许在其模板表达式中使用纯 JavaScript 表达式。下面是每个方法的用法示例:

// 1. includes() - 检查字符串str中是否包含子字符串"World"。
let str = "Hello World!";
console.log(str.includes("World")); // 输出: true

// 2. startsWith() - 检查字符串str是否以"Hello"开头。
console.log(str.startsWith("Hello")); // 输出: true

// 3. endsWith() - 检查字符串str是否以"!"结尾。
console.log(str.endsWith("!")); // 输出: true

// 4. slice() - 提取字符串str从索引0到索引5之前的部分。
console.log(str.slice(0, 5)); // 输出: "Hello"

// 5. substring() - 提取字符串str从索引6到索引11之前的字符。
console.log(str.substring(6, 11)); // 输出: "World"

// 6. substr() - 从字符串str的索引6开始提取5个字符。
console.log(str.substr(6, 5)); // 输出: "World"

// 7. replace() - 将字符串str中的"Hello"替换为"Goodbye"。
console.log(str.replace("Hello", "Goodbye")); // 输出: "Goodbye World!"

// 8. toUpperCase() - 将字符串str转换为大写字母。
console.log(str.toUpperCase()); // 输出: "HELLO WORLD!"

// 9. toLowerCase() - 将字符串str转换为小写字母。
console.log(str.toLowerCase()); // 输出: "hello world!"

// 10. trim() - 去除字符串strWithWhitespace两端的空白字符。
let strWithWhitespace = "  Hello World!  ";
console.log(strWithWhitespace.trim()); // 输出: "Hello World!"

// 11. concat() - 连接字符串str和str2。
let str2 = " Have a nice day!";
console.log(str.concat(str2)); // 输出: "Hello World! Have a nice day!"

// 12. charAt() - 返回字符串str中索引6处的字符。
console.log(str.charAt(6)); // 输出: "W"

// 13. charCodeAt() - 返回字符串str中索引6处字符的Unicode编码。
console.log(str.charCodeAt(6)); // 输出: 87

// 14. split() - 将字符串str按照空格分割成数组。
console.log(str.split(" ")); // 输出: ["Hello", "World!"]

对象

方法列表

序号方法作用
1Object.keys()返回一个包含给定对象所有自身可枚举属性名称的数组。
2Object.values()返回一个包含给定对象所有自身可枚举属性值的数组。
3Object.entries()返回一个给定对象自身可枚举属性的键值对数组。
4Object.assign()用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。
5Object.freeze()冻结一个对象,其他代码不能删除或更改任何属性。
6Object.seal()密封一个对象,防止添加新属性同时将所有现有属性标记为不可配置。

代码示例

在 Vue.js 中使用 JavaScript 的 `Object` 方法通常是为了操作数据对象。以下是如何在 Vue.js 组件中使用这些 `Object` 方法的示例:

<script>
export default {
  data() {
    return {
      userInfo: {
        name: 'Alice',
        age: 25,
        location: 'Wonderland'
      }
    };
  },
  computed: {
    // 使用 Object.keys() 获取对象的所有键
    userKeys() {
      return Object.keys(this.userInfo);
    },
    // 使用 Object.values() 获取对象的所有值
    userValues() {
      return Object.values(this.userInfo);
    },
    // 使用 Object.entries() 获取键值对数组
    userEntries() {
      return Object.entries(this.userInfo);
    }
  },
  methods: {
    // 使用 Object.assign() 合并对象
    updateUser() {
      const newInfo = { location: 'Looking Glass', job: 'Explorer' };
      this.userInfo = Object.assign({}, this.userInfo, newInfo);
    },
    // 使用 Object.freeze() 冻结对象
    freezeUser() {
      Object.freeze(this.userInfo);
    },
    // 使用 Object.seal() 密封对象
    sealUser() {
      Object.seal(this.userInfo);
    }
  },
  mounted() {
    // 在组件挂载时进行对象操作的例子
    this.updateUser();
    // 注意:在冻结或封闭对象后,Vue将无法响应式地更新这些对象
    // this.freezeUser();
    // this.sealUser();
  }
};
</script>

在模板中,你可以这样展示这些数据:

<template>
  <div>
    <h3>User Information:</h3>
    <p>Keys: {{ userKeys.join(', ') }}</p>
    <p>Values: {{ userValues.join(', ') }}</p>
    <ul>
      <li v-for="[key, value] in userEntries" :key="key">{{ key }}: {{ value }}</li>
    </ul>
    <button @click="updateUser">Update User</button>
    <!-- 注意:冻结或封闭对象后,尝试修改将不会有任何响应式效果 -->
    <!-- <button @click="freezeUser">Freeze User</button> -->
    <!-- <button @click="sealUser">Seal User</button> -->
  </div>
</template>

在这个例子中:

- `userKeys` 计算属性使用 `Object.keys()` 来获取 `userInfo` 对象中的所有键。
- `userValues` 计算属性使用 `Object.values()` 来获取 `userInfo` 对象中的所有值。
- `userEntries` 计算属性使用 `Object.entries()` 来获取 `userInfo` 对象中的键值对数组。
- `updateUser` 方法使用 `Object.assign()` 来更新 `userInfo` 对象的属性。
- `freezeUser` 和 `sealUser` 方法分别使用 `Object.freeze()` 和 `Object.seal()` 来冻结和密封 `userInfo` 对象。

请注意,当你使用 `Object.freeze()` 或 `Object.seal()` 后,Vue 将无法响应式地更新这些对象,因为这些操作会阻止 Vue 设置观察者来追踪数据变化。因此,通常不建议在 Vue 的响应式数据上使用这两个方法,除非你有特殊的需求,并且明白这样做的后果。

集合(数组)

方法列表

序号方法作用
1join()使用指定分隔符将数组元素连接成字符串。
2push()添加元素到数组末尾并返回新长度。
3pop()移除数组末尾元素并返回该元素。
4shift()移除数组第一个元素并返回该元素。
5unshift()将参数添加到数组开头并返回新长度。
6reverse()反转数组元素。
7sort()对数组进行排序,可以提供比较函数以按数值大小排序。
8slice()截取数组的一部分并返回,不影响原数组。
9splice()对数组进行元素删除、添加或替换。
10toString()将数组转换为字符串。
11indexOf()查找元素在数组中的索引,不存在则返回-1。
12forEach()遍历数组,对数组的每个元素执行函数,无返回值。
13map()创建一个新数组,其结果是数组中每个元素调用函数后的返回值。
14filter()创建一个新数组,包含通过测试的所有元素。
15find()查找数组中符合条件的第一个元素的值。
16findIndex()查找数组中符合条件的第一个元素的索引。
17every()测试数组的所有元素是否都通过了指定函数的测试。
18some()测试数组中是否有元素通过了指定函数的测试。
19reduce()对数组中的每个元素执行函数,结果汇总为单个返回值。

代码示例

// 1. join()
// 使用指定分隔符将数组元素连接成字符串。
let arr = [1, 2, 3, 4, 5];
let str = arr.join(','); // '1,2,3,4,5'

// 2. push() 和 pop()
// push(): 添加元素到数组末尾并返回新长度。
// pop(): 移除数组末尾元素并返回该元素。
let arr = ['张三', '李四', '王五'];
let count = arr.push('马六'); // ['张三', '李四', '王五', '马六'], count = 4
let item = arr.pop(); // '马六', arr = ['张三', '李四', '王五']

// 3. shift() 和 unshift()
// shift(): 移除数组第一个元素并返回该元素。
// unshift(): 将参数添加到数组开头并返回新长度。
let arr = ['张三', '李四', '王五'];
let item = arr.shift(); // '张三', arr = ['李四', '王五']
let count = arr.unshift('马六'); // ['马六', '李四', '王五'], count = 3

// 4. reverse()
// 反转数组元素。
let arr = [1, 2, 3, 4, 5];
arr.reverse(); // [5, 4, 3, 2, 1]

// 5. sort()
// 对数组进行排序,注意默认排序为按字符串比较。
let arr = [12, 2, 43, 5, 2, 5];
arr.sort(); // [12, 2, 2, 43, 5, 5]
// 若要按数值大小排序,需提供比较函数。
arr.sort((a, b) => a - b); // [2, 2, 5, 5, 12, 43]

// 6. slice()
// 截取数组的一部分并返回,不影响原数组。
let arr = ['张三', '李四', '王五', '马六'];
let newArr = arr.slice(1, 3); // ['李四', '王五']

// 7. splice()
// 对数组进行元素删除、添加或替换。
let arr = ['张三', '李四', '王五', '马六'];
arr.splice(2, 1, '七郎'); // ['王五'], arr = ['张三', '李四', '七郎', '马六']

// 8. toString()
// 将数组转换为字符串。
let arr = [1, 2, 3, 4, 5, 6];
arr.toString(); // '1,2,3,4,5,6'

// 9. indexOf()
// 查找元素在数组中的索引,不存在则返回-1。
let arr = ['张三', '李四', '王五', '马六'];
arr.indexOf('李四'); // 1
arr.indexOf('李四', 2); // -1

// 10. forEach()
// 遍历数组,无返回值。
let arr = ['张三', '李四', '王五', '马六'];
arr.forEach((value, index, self) => {
  console.log(`${value}--${index}--${self === arr}`);
});
// 输出:
// 张三--0--true
// 李四--1--true
// 王五--2--true
// 马六--3--true

// 11. map()
// 创建一个新数组,其结果是该数组中的每个元素调用一次提供的函数后的返回值。
let arr = ['张三', '李四', '王五', '马六'];
let newArr = arr.map(item => `你好:${item}`);
// ['你好:张三', '你好:李四', '你好:王五', '你好:马六']

// 12. filter()
// 创建一个新数组,包含通过测试的所有元素。
let arr = [1, 2, 3, 4, 5, 6];
let newArr = arr.filter(item => item > 3); // [4, 5, 6]

// 13. find()
// 查找数组中符合条件的第一个元素的值。
let arr = ['张三', '李四', '王五', '马六'];
let result = arr.find(item => item === '李四'); // '李四'

// 14. findIndex()
// 查找数组中符合条件的第一个元素的索引。
let arr = ['张三', '李四', '王五', '马六'];
let index = arr.findIndex(item => item === '李四'); // 1

// 15. every()
// 测试数组的所有元素是否都通过了指定函数的测试。
let arr = [1, 2, 3, 4, 5, 6];
let result = arr.every(item => item > 0); // true

// 16. some()
// 测试数组中是否有元素通过了指定函数的测试。
let arr = [1, 2, 3, 4, 5, 6];
let result = arr.some(item => item > 3); // true

// 17. reduce()
// 对数组中的每个元素执行一个由您提供的函数(接收四个参数),将其结果汇总为单个返回值。
let arr = [10, 20, 30, 40, 50];
let sum = arr.reduce((prev, now) => prev + now); // 150
let sumWithInitial = arr.reduce((prev, now) => prev + now, 110); // 260

互相转换

在 Vue.js 中,集合通常指的是数组或对象等数据结构。将这些集合转换为字符串或从字符串转换回集合,一般是通过 JSON 的序列化和反序列化来完成的。下面提供了两个例子,展示了如何在 Vue 组件中实现这两种转换。

将集合(数组或对象)转换为字符串

<template>
  <div>
    <p>Original Array: {{ originalArray }}</p>
    <p>Stringified Array: {{ stringifiedArray }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      originalArray: ['Vue.js', 'React', 'Angular']
    };
  },
  computed: {
    stringifiedArray() {
      // 使用 JSON.stringify 来将数组转换为字符串
      return JSON.stringify(this.originalArray);
    }
  }
};
</script>

在上面的例子中,originalArray 是一个包含前端框架名称的数组,stringifiedArray 计算属性使用 JSON.stringify() 方法将这个数组转换为 JSON 字符串。

将字符串转换为集合(数组或对象)

<template>
  <div>
    <p>Original String: {{ jsonString }}</p>
    <p>Parsed Array: {{ parsedArray }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      // 表示数组的 JSON 字符串
      jsonString: '["Vue.js", "React", "Angular"]'
    };
  },
  computed: {
    parsedArray() {
      // 使用 JSON.parse 来将字符串解析为数组
      return JSON.parse(this.jsonString);
    }
  }
};
</script>

在这个例子中,jsonString 是一个表示数组的 JSON 字符串。parsedArray 计算属性使用 JSON.parse() 方法将这个字符串解析回 JavaScript 数组。

这些操作在处理组件状态、存储和检索来自本地存储或服务器响应的数据时非常有用。在使用 JSON.parse() 时,应该注意异常处理,因为如果 JSON 字符串格式不正确,它会抛出错误的。

注意事项

在使用 Vue.js 时处理字符串、对象和集合(数组),有一些注意事项需要考虑,这些注意事项通常与 Vue 的响应式系统有关。以下是一些关键点:

字符串

1. 响应性更新:在 Vue 实例中,当你更改一个字符串类型的数据属性时,视图将自动更新以反映这个变化。

2. 直接赋值:对于字符串的更新,直接赋值即可,例如 `this.myString = 'new value';`。

3. 字符串操作:执行如 `slice` 或 `replace` 等不会改变原字符串的操作时,需要将结果赋值回响应式属性,以确保视图更新。

对象

1. 添加或删除属性:Vue 不能检测普通对象的属性添加或删除。如果你需要在对象上添加新的响应式属性,应该使用 `Vue.set` 或者在 Vue 3 中的 `reactive` 或 `set` 方法,例如 `Vue.set(this.myObject, 'newKey', 'newValue');`。

2. 响应性丢失:直接赋值一个新对象给一个响应式对象将会替换原对象,并且如果新对象不是响应式的,那么响应性将会丢失。要解决这个问题,可以使用 `Object.assign` 或展开运算符来更新对象的属性,而不是替换整个对象。

3. 嵌套对象:对于嵌套对象,如果你需要保持内部对象的响应性,应该确保内部对象在创建时就是响应式的。

集合(数组)

1. 变异方法:Vue 包裹了数组的变异方法,如 `push`, `pop`, `shift`, `unshift`, `splice`, `sort`, 和 `reverse`,这些方法可以触发视图更新。当你使用这些方法时,Vue 的响应式系统能够检测到变化并更新 DOM。

2. 非变异方法:非变异方法如 `filter`, `concat`, 和 `slice` 不会改变原数组,而是返回一个新数组。如果你使用这些方法,需要将返回的新数组赋值给一个响应式属性来确保更新视图。

3. 索引和长度的变化:Vue 不能检测到数组索引的直接设置或数组长度的修改。例如,`this.myArray[0] = 'newValue'` 或 `this.myArray.length = 0` 不会触发视图更新。你应该使用 `Vue.set` 或数组的变异方法来进行这些类型的更新。

4. 响应式数组的替换:如果你需要替换整个数组,你应该使用一个新的数组来替换旧的数组,这样可以保持响应性。

Vue 3 的 Composition API

在 Vue 3 中,使用 Composition API 时有一些额外的注意事项:

1. reactive vs. ref:`reactive` 用于创建响应式对象,而 `ref` 用于创建响应式的基本类型值。正确使用这两者对于管理响应式状态至关重要。

2. toRefs:当你需要将响应式对象的属性传递给组合函数时,应该使用 `toRefs` 以保持属性的响应性。

3. readonly:当你不希望响应式状态被修改时,可以使用 `readonly` 方法来创建一个只读的响应式状态。

4. watchEffect 和 watch:在使用 `watchEffect` 或 `watch` 来响应状态变化时,确保正确处理 cleanup 函数以避免内存泄漏。

记住,Vue 的响应式系统是自动的,但是遵循这些最佳实践可以确保你的应用程序以可预测的方式工作,避免出现常见的陷阱。

有用请点赞,养成良好习惯!

疑问、交流、鼓励请留言!

Logo

前往低代码交流专区

更多推荐