var obj{
属性1:属性值1, // 属性名=>key 不能重复
属性2:属性值2, // 属性值=>value 是该属性的唯一值 (键值对数据 键=>key 值=>value 有键必有值)
}

var obj{a:1,b:2,c:3,
}console.log(obj.a); //打印对象obj下属性a的value值123456

obj.d=obj.a + obj.b; // 创建并给obj的d属性赋值,不需要var

document.write(); console.log(); // 带括号的 => 函数(方法)
input.value; // 不带括号 => 属性

obj [“a”]=30; // obj [ key ]=value; 等价于 obj . a =30; (点语法内不能使用变量,不加引号)

var names="a";var v=20;var obj={
            [names]:v
        }12345

属性名就是字符串var obj={a:v}
当属性名是变量时,需要[]将变量包含
[ ] 内key要求属性名必须是字符型或symbol型,所以必须要有 " "
凡是字符,加了"“就是字符类型的字符串,不加”“就是变量名
只有在对象中属性名特殊,没有”"的属性名是字符串,有[]的属性名是变量

var a = "ab";var b=9;
obj [a] =30; // a是一个变量,相当于将"ab"字符串作为obj的属性名obj[b]=20; // 如果变量内的值不是字符型,则会隐式转换成字符型作为属性名 将变量b中的数字9隐式转换为字符“9”并作为obj的属性名console.log(obj.c); //obj对象内没有c属性,打印结果为undefined

 var obj={};        var o={a:1};
        obj[o]=20;        var o1={a:3};        console.log(obj[o1]);//o和o1是变量,被带入时转换为字符串[object Object];20
        console.log(obj.o1);//o1是字符,obj没有o1的属性;undefinedvar n;var m;
obj[n]=10;console.log(obj[m]); //打印结果为10 12345678910111213141516171819

因为变量n为undefined,隐式转换成字符“undefined”,obj[n] =>obj[“undefined”] =10
obj[m] => obj[“undefined”]
对象被强转为字符串会变成 " [ object object ] "

栈、堆
栈数据读取写入速度快,但存储内容较少
读取和写入速度慢,但存储内容多
字符型,数值型,布尔型,undefined 都存在栈中
对象,函数存在堆中
当点击对象前面的箭头时,才去堆中对应的地址取出数据
引用地址就是指堆中对象存储的地址

var o={a:1};        var o1=o;//将o对象的引用地址赋值给o1
        o1.a=10;//因为o1和o是同一个对象,因此修改o1的属性就相当于修改了o的属性
        console.log(o);//10var o={a:1};        var o1=o;
        o={b:2}; //重新改变新地址,o1与o不指向同一个地址
        o.a=20;        console.log(o1); // {a:1}
        console.log(o);  // {b:2,a:20}1234567891011

内存泄漏
当对象不再使用,但对象的引用列表中并没有清除引用关系时,对象依旧会存在于堆中,占用内存,不会被垃圾回收车回收,造成内存泄漏
对象被存储在堆中,如果堆中对象不断增加就会造成卡顿
对于处理内存中不需要的数据,我们叫做垃圾回收
当设置变量为null,可以将该对象引用列表中这个引用变量清除
当垃圾回收车过来的时候发现堆中该对象引用列表是空的时候就会将其清除
而栈中数据,一旦该变量不再使用,就会被清理掉

var i={a:1}; // 变量 i 内存放着对象{a:1} 的地址var j=i; // 变量 j 内也存着对象{a:1}的地址   变量 i 和 j 都指向对象{a:1}//如果此时,想要给变量 j 重新赋值,则先需要在对象{a:1}的引用地址中删除 j 对这个对象的引用,在重新赋值i = null; // 取消引用,释放对象占用的内存i = 2; // 重新赋值var obj={            a:1,            b:2,            c:3,            d:4,            e:undefined
        }        console.log("e" in obj);//判断e是不是obj的属性名;true1234567891011121314

遍历复制对象

var o={f:10,g:20};        for(var prop in obj){
            o[prop]=obj[prop];
        }console.log(o);12345

js中的对象遍历是根据对象属性添加的先后来遍历,对象遍历是有顺序的

Object.assign()方法复制对象

var o={f:10,g:20};        var obj={}
        o=Object.assign(o,obj);        console.log(o);1234

JSON方法复制对象

var str=JSON.stringify(obj);       console.log(str);12

这种固定样式类型的字符串,叫做JSON字符串,JSON类型

var obj={b:2}        console.log(obj);// {b:2},展开后a:1100;b:2;
        var str=JSON.stringify(obj);       	console.log(str);
        obj.a=10;
        obj.a++;
        obj.a*=100;        var s='{"b":2}';        var o=JSON.parse(s);//将JSON字符串转换为对象
        console.log(o);// {b:2}1234567891011

浅复制与深复制

var  obj={            a:1,            b:2,            c:{                d:10,                e:20
            }
        }//浅复制
        var o1={};        for(var prop in obj){
            o1[prop]=obj[prop];
        }        var o1=obj;
        obj.a=10;
        obj.c.d=100;        console.log(o1,obj);//obj与o1一起改变
 // 深复制
        var o1=JSON.parse(JSON.stringify(obj));//先转化为JSON字符串,然后再转换为对象进行复制
        obj.c.d=100;        console.log(o1,obj);// 改变obj不会影响O1123456789101112131415161718192021

对象清除

var o={a:1};
        o.b=10;        delete o.a;//删除属性
        console.log(o); {b:10}

JavaScript对象与其复制清除方法简析的更多相关文章

  1. js获取IP地址的4种方法

    1,js取得IP地址的方法一< src="http://pv.sohu.com/cityjson?ie=utf-8"></> < type="text/java"> document.write(returnCi......

  2. JavaScript中的事件委托机制跟深浅拷贝

    今天聊下JavaScript中的事件委托跟深浅拷贝一、事件委托首先呢,介绍一下事件绑定//方法一:通过onclick 点击 function clickEvent(){alert("点击事件");}//方法二:通过addEventListener 点击 var btn = doc......

  3. javascript脚本何时会被执行

    javascript脚本可以嵌入在html内的任意地方,但它何时被调用呢?当浏览器打开HTML文件后,会直接运行不是声明函数的脚本或通过事件调用脚本函数,下面分析这几种情况。1.浏览器在打开页面时执行脚本当浏览器打开一个HTML文件时,它会从头开始解释整个文件,包括html标签和脚本。如果脚本中有可......

  4. 原生JavaScript实现轮播图

    本文实例为大家分享了JavaScript实现轮播图的具体代码,供大家参考,具体内容如下效果:代码:* {margin: 0;padding: 0;}ul,li {list-style: none;}.banner {width: 1200px;height: 535px;border: 1px so......

  5. jQuery中toggle与slideToggle以及fadeToggle的显示、隐藏方法的比较

    1、区别 ①动画效果的比较: toggle:直接显示、隐藏,如果有【时间参数】且【匹配的元素有宽度属性】,则动态效果为左上角-右下角拉卷效果,透明度0-1之间的变化;若有时间参数但是【匹配的元素没有宽度属性】,则动态效果为上下拉卷的效果,且没有透明度的变化。 slideToggle:切换上下拉卷滚效......

  6. 前端 javascript 实现文件下载的示例

    在 html5 中,a 标签新增了 download 属性,包含该属性的链接被点击时,浏览器会以下载文件方式下载 href 属性上的链接。示例:下载1. 前端 js 下载实现与示例通过 javascript 动态创建一个包含 download 属性的 a 元素,再触发点击事件,即可实现前端下载。代码......

  7. 在JavaScript中查找字符串中最长单词的三种方法(推荐)

    本文基于Free Code Camp基本算法脚本“查找字符串中最长的单词”。在此算法中,我们要查看每个单词并计算每个单词中有多少个字母。然后,比较计数以确定哪个单词的字符最多,并返回最长单词的长度。在本文中,我将解释三种方法。首先使用FOR循环,其次使用sort()方法,第三次使用reduce()方......

  8. 细说 js 的7种继承方式

    在这之前,先搞清楚下面这个问题:function Father(){} Father.prototype.name = 'father';Father.prototype.children = [];const child1 = new Father();console.log('get1 =......

  9. js中获得当前时间是年份和月份

    js中获得当前时间是年份和月份,形如:201208 //获取完整的日期 var date=new Date; var year=date.getFullYear(); var month=date.getMonth()+1; month ......

  10. JavaScript实现页面动态验证码的实现示例

    引言:现在很多在用户登陆或注册的时候为了防止程序攻击,加入了动态验证的技术,一般是让用户输入随即生成的验证码来实现。我自己写了一个没有跟后台交互的,就在前端验证,发出来给大家看看。效果图: 实现思路:把数字和字母放到一个数组中,通过随机的方式取得数组下标,总共取4个组成验证码;把验证码渲染出来(......

随机推荐

  1. html5以及jQuery实现本地图片上传前的预览代码实例讲解

    html5以及jQuery实现本地图片上传前的预览,效果类似如下: 选择图片前的页面: 选择图片之后的预览效果: 下面直接上代码(只是最简单的实现代码,css样式没有复制,自己随意发挥)<!DOCTYPE html> <html> <head> <title......

  2. Oracle 常用命令大全(持续更新)

    数据库----数据库启动 & 关闭启动数据库SQL> startup nomount;SQL> alter database mount;SQL> alter database open; 关闭数据库SQL> shutdown immediate; 更多内容请参考:O......

  3. Kotlin + Flow 实现Android 应用初始化任务启动库

    特性Kotlin + Flow 实现的 Android 应用初始化任务启动库。支持模块化,按模块加载任务可指定工作进程名称,main 表示仅在主进程运行,all 表示在所有进程运行,默认值all可指定任务仅在工作线程执行可指定任务仅在调试模式执行可指定任务在满足合规条件后执行可指定任务优先级,决定同......

  4. java中日期格式化的大坑

    前言我们都知道在java中进行日期格式化使用simpledateformat。通过格式 yyyy-MM-dd 等来进行格式化,但是你知道其中微小的坑吗?yyyy 和 YYYY示例代码@Testpublic void testWeekBasedYear() {Calendar calendar = C......

  5. python实现经典排序算法

    以下排序算法最终结果都默认为升序排列,实现简单,没有考虑特殊情况,实现仅表达了算法的基本思想。冒泡排序内层循环中相邻的元素被依次比较,内层循环第一次结束后会将最大的元素移到序列最右边,第二次结束后会将次大的元素移到最大元素的左边,每次内层循环结束都会将一个元素排好序。def bubble_sort(......

  6. 【Python爬虫】:使用高性能异步多进程爬虫获取豆瓣电影Top250

    在本篇博文当中,将会教会大家如何使用高性能爬虫,快速爬取并解析页面当中的信息。一般情况下,如果我们请求网页的次数太多,每次都要发出一次请求,进行串行执行的话,那么请求将会占用我们大量的时间,这样得不偿失。因此我们可以i使用高性能爬虫,也就是采用多进程,异步的方式对数据进行爬取和解析,这样就可以在更快......

  7. .Net技术栈下的异步,你还在用同步方式进行开发吗?

    关于异步,其实是个老生常谈的话题,也是各大公司面试常问的问题之一.本文就几个点来介绍异步解决的问题注:对多线程的运行的基本机制要了解1、介绍有人可能会有疑问,为什么并行,非得用异步.多线程也已可以啊,多开两个线程不就行了.案例分析:现在有一个生活场景.需要煮饭(假设需要20分钟-机器煮)、洗衣服(假......

  8. 精通MySQL之架构篇

    老刘是即将找工作的研究生,自学大数据开发,一路走来,感慨颇深,网上大数据的资料良莠不齐,于是想写一份详细的大数据开发指南。这份指南把大数据的【基础知识】【框架分析】【源码理解】都用自己的话描述出来,让伙伴自学从此不求人。大数据开发指南地址如下:github:https://github.com/Bi......

  9. Java中将List拆分为多个小list集合

    前言:在平常写代码时候可能会遇到需要将一个大list拆分多个小list,进行一些业务处理。一、如何将List拆分为多个小list如何将List拆分多个小list,首先我们需要list.sublist这个方法如何使用。list.sublist(int fromIndex, int toIndex)方法......

  10. Jquery 格式化时间

    我们常常会通过datetime得到时间,但是网页前台往往会显示不同的时间如:2013-12-152013年12月23日2013 12 15等多种显示效果,这就需要我们把时间格式化一下。下面是通过Jquery格式化时间:$(function () { var time =......