js 中的变量的概念和引用

JavaScript变量可能分为两种不同数据类型的值:

一、基本类型值。

基本类型值:简单的数据段。undefined null Boolean number string。
如何访问:以上5种数据类型是按值访问,因为可以操作保存在变量中的实际值。
操作属性:(无法操作属性)

var name = "名字2";
name.age = 30;
console.log(name.age);//undefined 

复制变量值

var num1 = 5;
var num2 = num1;
num1+=1;
num2+=2;
console.log(num1);
console.log(num2);



二、引用类性质。

引用类型值:可能由多个值构成的对象(Object)。是保存在内存中的对象。
如何访问: js不允许直接访问内存中的位置,不能操作对象的内存空间。在复制对象时,实际是在操作对象的引用,而不是实际的对象。所以引用类型值是按引用访问的。在JavaScript中,可以使用“ . ”和“ [ ] ”来访问对象的属性。

var objectW = {
    name:"word文档",
    pic:"/data/images/win7.jpg",
    editFile: function(){
        //单击,选中,删除,回车等动作。。。
        if(true){
            //鼠标右键
            this.fileRightKey();
        }
        if(true){
            //双击全选此行
            this.doubleClick();
        }
    },        
    fileRightKey: function(){
        console.log("监听鼠标,如果在可编辑区域内点击了鼠标右键,那么");
    },
    doubleClick : function(){
        console.log("你双击了鼠标左键,那么。。。");
    }
}
var obj1 = objectW.name;
var obj2 = objectW.editFile();
console.log(obj2);

操作属性:(操作内存)在给对象添加属性时,操作的是实际的对象(也就是内存)。
复制变量值

var obj1 = objectW;
var obj2 = obj1;
obj1.name = "改变";
console.log(obj1.name);//改变
console.log(obj2.name);//改变

复制变量下,不管是obj1还是obj2,都是副本,只是有新旧。它们都指向着原型对象,或者叫父对象。因为是通过引用连接的,所以改变了其中任一个,三者都属性都改了。
exl中的对象是这个意思,其实就是一些方法和属性的组合,最后起个版权名字。



内存中存在一些默认定义好的原型对象,保存在堆内存中(堆内存:就是杂乱无章法的把衣服堆在那;栈内存:就是有规则的整理好,快速使用,受限使用),区别查看这里:https://zhuanlan.zhihu.com/p/118168534