JavaScript进阶教程——原始类型与引用类型、对象拷贝(克隆)

解决JavaScript中比较烧脑的问题

  1. 原始类型与引用类型
  2. 闭包
  3. 原型对象
  4. this关键字
  5. bind、apply、call
  6. 异步编程
    等等

原始类型与引用类型

开发中是否遇到以下问题:

  1. 修改了一个变量,发现另一个变量也随之变化(浅拷贝、深拷贝?对象?引用类型?)
  2. 对比两个变量,明明是相同的,但比较的结果就是flase(=====?)

基本概念

原始类型(值类型、基本类型): 数值、字符串、布尔、null、undefined、(bigint、symbol)
引用类型:对象Object(Array Date Math)

两种类型的区别

原始类型与引用类型三种情况下的对比:

  1. 赋值
  2. 比较
  3. 函数传参

赋值

在这里插入图片描述

发生以上不一样的情况是因为:原始类型与引用类型的存储方式不同

在这里插入图片描述

总结:原始类型赋【值】;引用类型赋【引用】,(引用就是复制的是一个内存地址,原始的就是赋值一个内存空间)

比较

在这里插入图片描述
在这里插入图片描述
比较:原始类型比较的是值是否相等;引用类型比较的是【引用】是否指向同一对象

函数传参

在这里插入图片描述

原始类型作为参数,函数内的操作不影响实参的值;引用类型作为参数,函数内的操作会影响实参的值

对象拷贝

对象拷贝有什么意义:
在开发项目的时候,我们如何得到两个相同的对象:
例如:

stu1 = {name: "xiaoming"};
stu2 = stu1

通过赋值仅仅是赋值了一个引用,这两个变量仍然指向同一个对象,
使用对象克隆技术,才能得到真正的,两个相同的对象

对象克隆的使用场景:

  1. 将对象作为函数参数的时候,不希望操作原对象
  2. 面试常见问题

在这里插入图片描述

对象拷贝的分类:

  1. 浅拷贝
  2. 深拷贝

浅拷贝针对原始类型,深拷贝针对引用类型

浅拷贝

在这里插入图片描述

let stu = {
  name: "zhangsan",
  age: 16
}


function copyObject(obj) {
  let newObj = {}
  // 拷贝的算法
  for(let i in obj) {
    newObj[i] = obj[i]
  }
  
  return newObj
}

let newStu = copyObject(stu)
stu.age = 100
console.log(stu)
console.log(newStu)

在这里插入图片描述

深拷贝

在这里插入图片描述

let stu = {
  name: "zhangsan",
  age: 16,
  bestFriend: {
    name: "xiaoming",
    age: 16
  }
}


// 传进来一个对象 得到对象副本
// 深拷贝
function copyObject(obj) { 
  let newObj = {}
  // 拷贝的算法
  for(let i in obj) {
    // newObj[i] = obj[i]
    if(obj[i] instanceof Object) {
      // 递归
      newObj[i] = copyObject(obj[i])
    }else {
      newObj[i] = obj[i]
    }
  }
  
  return newObj
}

let newStu = copyObject(stu)
stu.age = 100
stu.bestFriend.name ="laowang"
console.log(stu)
console.log(newStu)

两种方式实现对象拷贝:

  1. 递归
  2. 转JSON

在这里插入图片描述

let stu = {
  name: "zhangsan",
  age: 16,
  bestFriend: {
    name: "xiaoming",
    age: 16
  }
}

// 深拷贝
function copyObject(obj) { 
   
  let newStr = JSON.stringify(obj)
  let newObj = JSON.parse(newStr)
  return newObj
}

let newStu = copyObject(stu)
stu.age = 100
stu.bestFriend.name ="laowang"
console.log(stu)
console.log(newStu)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 字符串对象JavaScript中的一种数据类型,用于表示文本数据。字符串对象可以包含任何字符,包括字母、数字、符号和空格等。在JavaScript中,字符串对象是不可变的,也就是说一旦创建就不能修改。但是可以通过一些方法来操作字符串对象,如拼接、截取、替换等。常见的字符串方法有concat()、slice()、replace()等。掌握字符串对象的使用可以帮助我们更好地处理文本数据。 ### 回答2: JavaScript字符串对象是一个在JavaScript中非常重要的事物。JavaScript字符串对象可以帮助我们在JavaScript编程中行文本操作。通过了解字符串对象,可以使我们更有效地处理字符串数据,并让我们的代码更加强大。 JavaScript中的字符串对象具有很多方法和属性,可以帮助我们对字符串行各种操作。以下是一些常用的字符串对象方法: 1. length属性:返回字符串的长度。 2. charAt()方法:返回指定索引位置的字符。 3. concat()方法:连接两个或多个字符串。 4. slice()方法:提取字符串的一部分,并返回一个新字符串。 5. substr()方法:从指定位置开始提取长度为指定的字符。 6. replace()方法:替换字符串中的指定文本。 7. split()方法:将字符串转换为数组。 8. toLowerCase()方法:将字符串转换为小写。 9. toUpperCase()方法:将字符串转换为大写。 在JavaScript中处理字符串非常重要,因为在处理表单、验证用户输入等方面都需要使用到字符串。字符串对象也是最常用的JavaScript对象之一,因此熟悉JavaScript字符串对象将有助于提高程序的效率和简洁性。 需要特别注意字符串是不可修改的,一旦创建了一个字符串对象,就无法修改它的值。所以,任何字符串的修改操作都将返回一个新的字符串。 在编写程序时,应根据需要选择适当的字符串操作方法和属性。例如,在向用户显示错误消息时,可能需要使用charAt()方法或slice()方法来提取并显示错误消息中的第一个字符或前几个字符。或者,在对用户输入行验证时,可以使用indexOf()方法或search()方法来检查输入的字符串中是否包含特定的字符或字符串。 总之,JavaScript字符串对象是处理JavaScript编程中文本数据的重要工具。通过了解字符串对象的各种方法和属性,可以更加有效和灵活的处理和操纵字符串数据。 ### 回答3: JavaScript中的字符串对象是一个字符串值的表示。它提供了对字符串值的访问和操作。JavaScript字符串是Unicode字符串,因此它们可以包含任何Unicode字符(包括多字节字符)。 字符串对象的主要方法有: 1. charAt()方法-返回指定索引的字符。该索引是基于零的。例如: var str = "hello world"; console.log(str.charAt(1)); //输出e 2. concat()方法-将一个或多个字符串连接到原始字符串,并返回新字符串。例如: var str1 = "hello "; var str2 = "world"; var newStr = str1.concat(str2); console.log(newStr); //输出hello world 3. indexOf()方法-返回第一个匹配的字符索引。如果没有找到匹配项,则返回-1。例如: var str = "hello world"; console.log(str.indexOf("world")); //输出6 4. lastIndexOf()方法-返回最后一个匹配的字符索引。如果没有找到匹配项,则返回-1。例如: var str = "hello world"; console.log(str.lastIndexOf("l")); //输出9 5. replace()方法-替换字符串中的字符。例如: var str = "hello world"; console.log(str.replace("world", "everyone")); //输出hello everyone 6. slice()方法-从字符串中提取指定的字符。例如: var str = "hello world"; console.log(str.slice(0, 5)); //输出hello 7. split()方法-将字符串拆分为子字符串,并返回一个数组。例如: var str = "hello world"; console.log(str.split(" ")); //输出["hello", "world"] 字符串对象JavaScript中最常用的对象之一。它提供了许多方法,可以让您对字符串执行各种操作,包括搜索、提取和更改字符。熟练掌握这些方法,可以使您在JavaScript中更有效地处理字符串值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lalaxuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值