• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2021-05-18 07:03 Aet 隐藏边栏 |   抢沙发  8 
文章评分 6 次,平均分 5.0

调试

debugger

  1. 可以使用 debugger 命令来暂停代码

代码风格

花括号

行长度

  1. 没有人喜欢读一长串代码,最好将代码分割一下。

缩进

  1. 水平方向上的缩进:2 或 4 个空格。
  2. 垂直方向上的缩进:用于将代码拆分成逻辑块的空行。

对象

  1. 对象则用来存储键值对和更复杂的实体。
  2. 可以通过使用带有可选 属性列表 的花括号 {…} 来创建对象。
  3. 一个属性就是一个键值对(“key: value”),其中键(key)是一个字符串(也叫做属性名),值(value)可以是任何值。

  1. 使用 const 声明的对象是可以被修改的(const 声明仅固定了 user 的值,而不是值(该对象)里面的内容。)

方括号

  1. 对于多词属性,点操作不能用。
  2. 方括号中的字符串要放在引号中,单引号或双引号都可以。

  1. 当创建一个对象时,我们可以在对象字面量中使用方括号。

  1. 属性值简写。

  1. 变量名不能是编程语言的某个保留字,但对象的属性名并不受此限制。

属性存在性测试

  1. JavaScript 的对象有一个需要注意的特性:能够被访问任何属性。
  2. 即使属性不存在也不会报错!读取不存在的属性只会得到 undefined

  1. 还有一个特别的,检查属性是否存在的操作符 "in"

  1. 请注意,in 的左边必须是 属性名。通常是一个带引号的字符串。如果我们省略引号,就意味着左边是一个变量,它应该包含要判断的实际属性名。

  1. 为何会有 in 运算符呢?与 undefined 进行比较来判断还不够吗?
    1. 大部分情况下与 undefined 进行比较来判断就可以了。
    2. 但有一个例外情况,这种比对方式会有问题,但 in 运算符的判断结果仍是对的。(属性存在,但存储的值是 undefined 的时候)

for...in

  1. 语法

  1. 示例

对象的排序

  1. 如果我们遍历一个对象,我们获取属性的顺序是和属性添加时的顺序相同吗?
  2. “有特别的顺序”:整数属性会被进行排序,其他属性则按照创建的顺序显示。

  1. 这里的“整数属性”指的是一个可以在不做任何更改的情况下与一个整数进行相互转换的字符串。
  2. “49” 是一个整数属性名,因为我们把它转换成整数,再转换回来,它还是一样的。但是 “+49” 和 “1.2” 就不行。
  3. 如果属性名不是整数,那它们就按照创建时的顺序来排序

对象的引用和复制

  1. 与原始类型相比,对象的根本区别之一是对象是“通过引用”被存储和复制的,与原始类型值相反:字符串,数字,布尔值等 —— 始终是以“整体值”的形式被复制的。
  2. 赋值了对象的变量存储的不是对象本身,而是该对象“在内存中的地址”,换句话说就是对该对象的“引用”。
  3. 当一个对象变量被复制 —— 引用则被复制,而该对象并没有被复制。

  1. 比较

  1. 克隆与合并

  1. 深层克隆
    1. JavaScript 中的对象深拷贝是指创建一个新的对象,该对象的所有属性都具有与原始对象相同的值,但在内存中完全独立于原始对象。这意味着对新对象的修改不会影响原始对象,反之亦然
    2. 实现对象的深拷贝通常涉及递归地复制对象的所有属性,包括嵌套对象和数组。方法如下:
    3. 递归复制:

  1. 使用json序列化和反序列化
    利用 JSON.stringify() 方法将对象序列化为 JSON 字符串,然后使用 JSON.parse() 方法将 JSON 字符串反序列化为新对象。这种方法简单易行,但不能处理对象中包含函数、正则表达式等非序列化的特殊类型

  2. 使用第三方库,如lodasshMARKDOWN_HASHb81453378a0c6e5389111178cf249c11MARKDOWN<em>HASH
    JavaScript 库 lodash 中的 [.cloneDeep(obj)](https://lodash.com/docs#cloneDeep)。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2024-05-14
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享