简介

  1. js引擎由于为了效率,很多时候的非直接量赋值都不是copy一份在赋值给新的变量,而是一个引用

    ps:直接量:直接值数字字符串等
  2. 为什么使用len = doms.length; 里的len效率要比doms.length高

js赋值运算的理解

我们先来看一个例子

var parent = {
x : 1,
y : 2
};
var child = parent;
child.x = 3;
console.log( parent.x ); //=>3

从上面这个例子可以看出,当把parent赋值给child的时候并不是把parent克隆一份然后再赋值给child,实则child只是parent的一个引用

而直接量可以这么解释

看例子:

var parent = 5;
var child = parent; //也可以说是把parent的引用赋值给child
child = 3; // 但是这里的 直接量3的引用把parent的引用给覆盖了 而其实parent也是引用这个直接量
console.log( parent ); //=>5

那有人可能会举这样的例子

var parent = 5;
var child = parent;
child.x = 2;
console.log( parent.x ); //=>undefined

说这里总是没有把paient的引用给覆盖了,而只是给child加了一个属性,那么为什么parent.x 为 undefined 呢?这里你可能要去看一下我之前的一篇博客了关于js的包装对象

为什么使用len = doms.length; 里的len效率要比doms.length高

因为使用 getElementsByTagName函数获取到的doms是一个动态的伪数组,length属性是一个动态计算的。所以当每次使用doms.lenth的时候都进行了一次计算,而把doms.length赋值给len以后 len存的是计算的结果,是一个直接量,故效率肯定高。

其它还有一些使用赋值运算会使效率提高,因为变量里放的是计算过后的结果,如:

  • var div = document.geElementById('div'); //此类的获取元素 div获得了直接的引用,下回就不用再由getElementById来计算引用

那么如果我们要copy一份第一个例子中的对象该怎么办?

遍历对象所有属性和方法,一一把属性方法复制过去

var parent = {
x : 1,
y : 2
};
var child = {};
for( var i in parent ){
child[i] = parent[i];
}

而child.x 引用的直接量是parent.x而parent.x引用的直接量是1,所以它们引用同一个直接量,是不是有点绕,哈哈

js赋值运算的理解的更多相关文章

  1. 一道JS 连续赋值运算的问题

    原文链接:https://www.cnblogs.com/joesbell/p/6229423.html <script> var a = {n:1}; var b = a; a.x = ...

  2. PHP赋值运算

    1. 赋值运算:= ,意思是右边表达式的值赋给左边的运算数. $int1=10; $int1=$int1-6; //$int1=4 echo $int1,"<br>"; ...

  3. C++中的构造函数,拷贝构造函数和赋值运算

    关于C++中的构造函数,拷贝构造函数和赋值运算,以前看过一篇<高质量C++/C编程指南>的文章中介绍的很清楚,网上能搜索到,如果想详细了解这方面的知识可以参看一下这篇文章. 常见的给对象赋 ...

  4. 对js原型简单的理解和图解

    对js原型简单的理解和图解 最近在努力的学习js中,今天就抽了个空把自己理解的原型,记下一下在笔记中,以后自己查看,有空在会把原型链记录一下. 1.prototype prototype:是一个函数的 ...

  5. Java 基础【06】复合赋值运算

    这是今天在开发当中遇到的问题,虽然不是很大,但还是花了一点时间去琢磨. 嗯,好了.先看一段源代码 short value=2; value-=2; 源码就是上面这个样子的,我动手写的时候因为理解的问题 ...

  6. js连续赋值,你理解了吗

    看一道有意思的题,也许你会自信满满地写下答案,会是正确的吗? }; var b = a; a.x = a = {n: }; console.log('a',a); console.log('b',b) ...

  7. python基础之赋值运算

    之前的文章说明了变量的三大组成部分,详细说明了变量名与变量值,但是对于赋值这一块介绍相对较少,今天就来对这一部分进行补充,除了egon老湿所讲之外,本喵还参阅了<python3-cookbook ...

  8. 《剑指offer》面试题1:赋值运算函数

    面试题1:赋值运算函数 题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数 class CMyString { public: CMyString(char* pData = NU ...

  9. js参数arguments的理解

    原文地址:js参数arguments的理解 对于函数的参数而言,如下例子 function say(name, msg){ alert(name + 'say' + msg); } say('xiao ...

随机推荐

  1. Ajax的js库分析简化版

    Ajax jquery的库的简化版本 (function(){    //面向外界的唯一变量接口!    var myajax = window.myajax = {};    //作者.版本号等等信 ...

  2. 详解Java GC的工作原理+Minor GC、FullGC

    详解Java GC的工作原理+Minor GC.FullGC 引用地址:http://www.blogjava.net/ldwblog/archive/2013/07/24/401919.html J ...

  3. Android 开发快速导引:Android程序框架【草】

    概述 学习一项新技术之前要先了解这个技术的整体框架,这里先简单说一下 Android 的程序结构. Android App 有四个顶层的类:Activity.Service.ContentProvid ...

  4. python获取当前时间的用法

    1.先导入库:import datetime 2.获取当前日期和时间:now_time = datetime.datetime.now() 3.格式化成我们想要的日期:strftime() 比如:“2 ...

  5. Linux堆溢出漏洞利用之unlink

    Linux堆溢出漏洞利用之unlink 作者:走位@阿里聚安全 0 前言 之前我们深入了解了glibc malloc的运行机制(文章链接请看文末▼),下面就让我们开始真正的堆溢出漏洞利用学习吧.说实话 ...

  6. Nova PhoneGap框架 第二章 理解index.html

    跟绝大多数PhoneGap程序一样,Index.html是程序的入口.这个页面应该完成应用程序的初始化工作. 首先,让我们来看看这个页面通常都长什么样子: 下面我将一一解释这个页面都做了哪些初始化工作 ...

  7. A Beginner's Guide to Paxos

    Google Drive: A Beginner's Guide to Paxos The code ideas of Paxos protocol: 1) Optimistic concurrenc ...

  8. Azure PowerShell (1) PowerShell入门

    <Windows Azure Platform 系列文章目录> Update: 2016-01-11 笔者文档主要都是用Azure PowerShell 0.x版本来实现的,比如0.98版 ...

  9. WCF学习之旅——第一个WCF示例(三)

    第五步:创建客户端 WCF应用服务被成功寄宿后,WCF服务应用便开始了服务调用请求的监听工作.此外,服务寄宿将服务描述通过元数据的形式发布出来,相应的客户端就可以获取这些元数据.接下来我们来创建客户端 ...

  10. 基于JQuery的浮动DIV显示提示信息并自动隐藏

    /** * 浮动DIV定时显示提示信息,如操作成功, 失败等 * @param string tips (提示的内容) * @param int height 显示的信息距离浏览器顶部的高度 * @p ...