基本变量和引用变量

基本数据类型作比较,值相等则相等,值不相等则不相等(忽略数据类型)

引用类型作比较,引用地址相等则相等,否则都是不等的。

基本数据类型,和引用数据类型作比较,是比较值是否相等(忽略数据类型)

console.log([ []==[] , []===[] , 4==[4] , 4===[4]  ]);  //返回:[false, false, true, false]

1,引用数据类型: [] 数组,只有 a=[] , b=a (引用地址相等) 只有这种情况才相等,否则都是不等的。

      所以 [] == [] 返回 false;    [] === [] 返回:false

2,[4] 经过隐式类型转换 :console.log(Number([4]));  返回:4 。

      所以,4==[4] 返回:true;   4===[4] 返回:true 。

======================================

<script>

//引用类型只要重新赋值,那么就是重新在堆内存空间中开辟新的内存地址。

var a=[4];

var b=a;//b=[4];

a=[4,44];//重新给变量a开辟新的堆内存空间。

document.write(b);//返回:[4]

a=b;//b=[4],所以a=[4]

a.push(44);// a=[4,44] b=[4,44]

document.write(a);//返回:[4,44];

</script>

======================================

javascript


变量就是保存数据的容器:包含$ ,_  ,字母,数字,数字不能开头,区分大小写,不能是保留字和关键字:class,function等等。

变量命名:首先按照项目组的规定来命名。驼峰命名btnConfirm  btn_confirm  buttonConfirm  一定要有意义的,千万别写btn1  btn2 btn3 等等无意义的命名,尽量使用英文而别用汉语拼音。

数据是最重要的。
变量:
1,基本类型:值不可修改  4  "str"  true/false undefined  null NaN(not a number)
2,引用类型:值可以修改
栈堆内存
栈内存:类似楼梯阶梯,空间大小固定,只可以放一个东西,值不可改变,且是有序的。所以是存放基本类型。
堆内存:类似可以放一大堆东西的空间,空间大小可以改变,是无序的,可以放这个也可以放那个。所以是存放引用类型。

================

区别

基本数据类型:值不可修改 Number String Boolean Undefined Null 等 网页中的最小单位

引用数据类型:值可以修改 Array[] {}对象 都是由基本数据类型组成的

 ---------------------------

//基本数据类型,是网页中的最小单位,所以不能添加删除修改属性。

var person="xiaoming";

person.age=19;

console.log(person.age);//返回:undefined

=======================

var a=4;//4基本数据类型,是不可修改的。

a=3;//这里只是覆盖了4,4本身并没有变化。

console.log(a);//返回:3

------------

string 的包装对象 String,从而调用该包装对象的方法,基本数据类型本身是没有方法的

1 的包装对象是 Number 从而调用该包装对象的方法,基本数据类型本身是没有方法的

 

var str="string";//基本数据类型
//把s 替换成 "",创建一个新的字符串,不会在原有的字符串里面修改,因为办不到。
var anotherStr=str.replace("s","");
console.log(str+"--"+anotherStr);//返回:string--tring

------------

// 引用类型可以添加删除修改属性的

//引用类型里面可以是基本数据类型

//引用类型是里面还可以是引用类型
var person={};
console.log(person);//返回:{}
person.name="ZhengLiang";//引用类型里面是基本数据类型
person.sex="Male";//男
person.sex="Female";//女
console.log(person);//返回:{name: "ZhengLiang", sex: "Female"}
delete person.name;
console.log(person);//返回:{sex: "Female"}

person=["fathor","mother"];//引用类型是里面还是引用类型

=================参数传递==================

不管是基本数据类型还是引用数据类型进行参数传递,传的都是值本身,而不是引用。

而访问则不同:

基本数据类型:是直接访问值。

引用数据类型:通过引用地址指向指定的堆内存空间中的某一个地址访问值。

------------------基本数据类型传递参数-------------------

<script>

//a , b 是形参(形式参数)

function addScore(a,b){

return a+b;

}

//这里的80 , 70 是实参(实际参数)

console.log(addScore(80,70));

</script>

------------------引用数据类型传递参数-------------------

<script>

//引用类型传递参数 obj是形式参数

function setName(obj){

return obj.name="xm";

}

var person={};//声明空对象

//调用setName方法,把person这个值直接传递给obj(传递的不是引用),变成person.name="xm"。

setName(person);

console.log(person.name);//返回:xm。

</script>

------------------引用数据类型传递参数-------------------

<script>

//引用类型传递参数 obj是形式参数

function setName(obj){

obj.name="xm";//这里的obj=person

obj={};//给obj重新开辟了一个堆内存空间,是一个新的对象,跟person本身没有关系了。所以下面输出xm。

obj.name="xh";

}

var person={};//声明空对象

//调用setName方法,把person这个值直接传递给obj(传递的不是引用),变成person.name="xm"。

setName(person);//obj=person 

console.log(person.name);//返回:xm。

</script>

如下图:请注意obj={}; 是引用地址指向了另外一个堆内存空间。即重新开辟对象了。

-------------------------------------

数据类型:Number String Boolean Undefined Null  []数组  {}对象  function函数  RegExp正则表达式

<script>

//-------引用数据类型具体是什么类型数据-------

//基本数据类型,使用 indanceof 该方法,全部返回 false

console.log([] instanceof Array);//返回 true

// console.log(Array);//返回:Array() { [native code] }

// console.log([] instanceof array);直接报错 array 是构造函数,应该是大写:Array

console.log([] instanceof Object);//返回 true

// console.log([] instanceof object);直接报错 boject 是构造函数,应该是大写:Object

// console.log(Object) ;//返回:Object() { [native code] } 

console.log({} instanceof Object);//返回 true {}空对象是 Object 的实例

console.log({} instanceof Array);//返回 false {}空对象不是 Array 的实例

 

//------基本数据类型使用indstanceof,全部返回 fasle-------

console.log(1 instanceof Number);//返回 false

console.log("string" instanceof Number);//返回 false

console.log(false instanceof Number);//返回 false

</script>

以下是基本数据类型使用 typeof 返回的数据类型 : number string boolean undefined null

Number()  toString()  String()  Boolean()  isNaN() 这些都是类型转换的方法

<script>

//typeof 或者 typeof() 返回的一定是字符串

console.log(typeof null);//返回:Object null是Null数据类型,因为typeof 返回的是字符串,所以是Object

console.log(typeof false);//返回:boolean

console.log(typeof 1);//返回:number

console.log(typeof "a");//返回:string

console.log(typeof a);//返回:undefined  a是一个未定义的变量:a="";

</script>

-------------------------------------

<script>

function add(a,b){

return a+b;

}

function fn(fn){

fn.person="xm";

fn=function(){};

fn.person="xh";

}

fn(add);//只要涉及参数传递,直接把参数值带入函数中,再一步一步执行即可。

/*参数传递都是值的传递。解析该函数:

function(add){//直接把add这个值带入fn(fn)函数执行即可

add.person="xm";

add=function(){};//这里的add是引用类型,重新在系统堆内存中开辟一个新的空间。和先前的add没有关系

add.person="xh";

}*/

console.log(fn.person);//返回 xm

</script>

------------------------------------------

 

javascript数据类型:数据类型:
1,基本数据类型:Numer String Null Undefined Boolean 五种。
2,复杂数据类型:Object
null 表示一个空对象指针,如果变量用于保存对象,那么最好将变量初始化为null,而不是其他值。
对象里面是有多个属性,函数等等。一般都是空对象的变量才设置为null。而不是一个单纯的变量。
var person=null;
typeof的使用方法有两种:(1)typeof 变量(2) typeof(变量)typeof的返回值有Undefined、Null、Boolean、Number、String、Object,但是返回值的类型是String类型。上面的返回值Null,Boolen...都是String类型。var name="zheng";console.log( typeof( name ) );console.log(typeof name);



栈内存:类似楼梯的阶梯,有序的,一个阶梯只能放一个值,这个值是固定不可修改,这个值可以是基本类型,也可以是一个引用地址。
堆内存:类似一个巨大空间,无序的,可以放很多东西,值多大就开辟多大的空间进行存储,值可以改变的。

引用类型的值可以修改,凡是可以修改的都可以看作引用类型

函数是引用类型,可以为其添加属性和方法。只要是引用类型都可以添加属性和方法。

一个变量----进来如果是基本类型(值不可以改变),那就可以直接使用。

一个变量进来如果是引用地址(不是一个值,而是一个指路标),那么需要去堆内存空间去取该值。

一个变量取值顺序是-------》栈内存------》堆内存。

-------------------------------------------------

变量比较是否相等

基本类型和基本类型比较:只要是值相等,那么两个就一定相等。(注意数据类型也要完全相等。)

引用类型和引用类型比较:只有两个引用地址指向的是堆内存里面开辟的同一个存储空间时,

两个变量才会相等,否则都是不相等的。如下面:

-----------------------------------------

<script type="text/javascript">
        var xm={
            age:18,
            score:4
        };
        var xh={
            age:18,
            score:4
        };
        console.log(xm===xh);//xm,xh在堆内存中各自开辟了一个空间,两个引用地址不同,所以两个是不同对象,不相等。
    </script>

控制台输出:false,即不相等

变量xm和xh是两个变量,先在栈内存中各自开辟一个内存位置。

然后xm在堆内存中自己开辟一个空间存放age和score。

xh也在堆内存中自己开辟一个空间存放age和score。

虽然两个属性和值都是一模一样的,但是开辟了两个不同的内存空间,两个完全不同的引用,

是两个完全不同的对象,所以,两者并不相等。

=================================================

-----------------------------------------

<script type="text/javascript">
        var xm={
            age:18,
            score:4
        };
       var xh=xm;//把xm的引用地址赋值给xh,他们的引用地址相等,指向同一个值,所以相等
        console.log(xm===xh);
    </script>

控制台输出:true,即相等。

==========================

undefined==null    返回 true

undefined===null    返回false

==比较的是值,===比较的是值和类型;undefined和null的值相等; undefined是Undefined类型,null是Null类型,它们的数据类型不相等。

--------------------------------

<script type="text/javascript">
        document.write([  [ ]==[ ] , [ ] === [ ], 4==[4],4===[4] ]);
</script>

输出结果:false,false,true,false

-------------------------------

var xm={

            age:18,

            score:4

        };

        var xh=xm;

        xh.score++;

        //引用类型是可以修改的。引用地址相同,那么值也就一定相等。因为指向同一个对象的值。

        console.log(xm.score);//返回:5

        console.log(xh.score);//返回:5

----------------------------

对应浅层拷贝 ,还有另外一个深层拷贝。

以下是浅层拷贝:

var xm={

            age:18,

            score:4

        };

        function copyObj(obj){

        var newObj={};

        for(var a in obj){

        newObj[a]=obj[a];

        }

        return newObj;

        }

        var xh=copyObj(xm);

        console.log(xh);

--------------------------------

如果拷贝对象里面还有对象,那么使用上述浅层拷贝的方法就会报错,如下:

var xm={

            age:18,

            score:4

            family:{"father","mother"}  //这里报错

        };

        function copyObj(obj){

        var newObj={};

        for(var a in obj){

        newObj[a]=obj[a];

        }

        return newObj;

        }

        var xh=copyObj(xm);

        console.log(xh);

---------------------------------

如果是两个引用类型的数据进行比较,那么比较的是它们的引用:即使两个数组各个索引元素完全相等,它们也是不相等的。

上文的数组 [ ] 和 [ ] 是值相等,但是引用数据类型是比较引用地址,如果地址相同,那就相等,否则都是不相等。

如果是基本数据类型和引用数据类型进行比较,那么会把引用类型数据转换成基本数据类型进行比较,如果值相等,那就相等,否则不等。

基本数据类型和基本数据类型相比较,值相等,那么结果就相等。

举个例子:

var a = [];  // 定义一个引用空数组的变量a

var b = a;   // 变量b引用同一个数组

b[0] = 1;    // 通过变量b来修改引用的数组

a[0]         // => 1: 变量a也会修改

a === b      // => true:a和b引用同一个数组,因此它们相等

 

如果两个不同类型的数据进行==比较,会把左右转换成同一类型再比较,

如果一个运算数是对象,另一个是数字,会把对象转换成数字。

 -----------------------------------

<script type="text/javascript">
        var a=[4];
        var b=a; //把a的引用赋值给b,如果这里添加 b=[4,44],那就改变了引用指向的堆内存的值,所以a=b=[4,44]
        a=[4,44];  //重新赋值,开辟新空间,没有改变b的引用,所以b的值为4不变。
        document.write(b+",");  ?、
        b.push(44);   //在b后面追加44。所以b=[4,44].
        document.write(b);
    </script>

-----------------------------------

LOGO png图片制作https://www.logoko.com.cn/pngimg.com快速抠图:https://www.gaoding.com/
各种转换转义:https://www.sojson.com/

转载于:https://www.cnblogs.com/Knowledge-is-infinite/p/10602005.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[云框架]KONG API Gateway v1.5 -框架说明、快速部署、插件开发

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 当前版本采用KONGv0.12.3 当我们决定对应用进行微服务改造时&#xff0c;应用客户端如何与微服务交互的问题也随之而来&#xff0c;毕竟…

python 游戏 —— 汉诺塔(Hanoita)

一、汉诺塔问题 1. 问题来源 问题源于印度的一个古老传说&#xff0c;大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定&#xff0c;在小圆…

error: failed to push some refs to 'https://gitee.com/xxx/xxx'

一开始以为是本地版本和线上的差异 果断先直接pull 之后 还是不对,哎 不瞎搞了 搜... 获得消息: git pull --rebase origin master 原来如此:是缺失了文件 转载于:https://www.cnblogs.com/G921123/p/10605956.html

DevOps团队结构类型汇总:总有一款适合你

前言 组织中任何DevOps工作的主要目标都是改进客户和业务的价值交付&#xff0c;而不是降低成本、提升自动化或者通过配置管理驱动一切&#xff1b;这意味着&#xff0c;为了实现有效的Dev和Ops协同&#xff0c;不同的组织可能需要不同的团队结构。 概述 具体哪种DevOps团队结构…

magic

转载于:https://www.cnblogs.com/P201821430028/p/10611080.html

Vue 后台管理

这里是结合vue和element快速成型的一个demo 里面展示了基本的后台管理界面的大体结构和element的基本操作 GitHub的地址&#xff1a;https://github.com/wwwming/adminDemo 转载于:https://www.cnblogs.com/wangming1002/p/10613014.html

Linux查看MySQL版本的四种方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1 在终端下执行 mysql -V 2 在help中查找 mysql --help |grep Distrib 3 在mysql 里查看 select version() 4 在mysql 里查看 status…

行业指数动量策略+akshare

以周为单位&#xff0c;获取本周最强的5只行业指数&#xff0c;进行均值购买。 数据源采用akshare。 导入包 import akshare as ak import pandas as pd import numpy as np import matplotlib 日线换为周线 #日线换为周线数据 def transferToWeekLine(df):data1dfstock_da…

2019-03-28 SQL Server Pivot

--现在我们是用PIVOT函数将列[WEEK]的行值转换为列&#xff0c;并使用聚合函数Count(TotalPrice)来统计每一个Week列在转换前有多少行数据&#xff0c;语句如下所示 select * from ShoppingCart as C PIVOT(count(TotalPrice) FOR [Week] IN([1],[2],[3],[4],[5],[6],[7])) AS…

C/C++开发者必不可少的15款编译器+IDE

摘要&#xff1a;C/C这两门语言依然活跃在编程领域里&#xff0c;其不仅拥有强大的功能集&#xff0c;而且还提供了强大的安全保障。为此&#xff0c;笔者专为C/C编码者收集了15款令人印象深刻的IDE和编译器。 Web开发者可选择的编程语言有很多比如&#xff0c;Java、.Net、PH…

白山云科技 CTO 童剑:空降后,如何有技术又有艺术地破局?

TGO 鲲鹏会北京分会举行了一场线下分享活动——《 CTO 空降如何平稳落地 》&#xff0c;白山云科技&#xff08;下称“白山”&#xff09;CTO 童剑分享了他的故事和经验。在工作中&#xff0c;“空降”这个问题不仅仅是 CTO 会遇到&#xff0c;每一个带团队的领导都会遇到。如何…

如何理解指向指针的指针?

本文由 伯乐在线 - 菜鸟浮出水 翻译自 StackOverflow。欢迎加入 技术翻译小组。转载请参见文章末尾处的要求。问题&#xff1a;如何理解指向指针的指针&#xff1f; 我在一篇教程中看到下面这段&#xff0c;它描述指向指针的指针是如何运作的。 引用文章相关段落如下&#x…

Linux定时任务Crontab命令详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作&#xff0c;因此这个系统服务是默认…

中小企业网络安全提升

为什么80%的码农都做不了架构师&#xff1f;>>> 据外媒报道&#xff0c;绝大多数网络罪犯的目标是中小企业&#xff0c;然而研究表明&#xff0c;大多数企业主并不认为自己有成为网络犯罪分子目标的可能。为了保护自己不受网络攻击&#xff0c;企业应该关注以下五个…

用Linux命令行生成随机密码的十种方法

本文由 极客范 - 小道空空 翻译自 Lowell Heddings。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。Linux操作系统的一大优点是对于同样一件事情&#xff0c;你可以使用高达数百种方法来实现它。例如&#xff0c;你可以通过数十种方法…

[个人网站搭建]·Django增加评论功能(Python3)

[个人网站搭建]Django增加评论功能 个人主页--> https://xiaosongshine.github.io/ 个人网站搭建github地址&#xff1a;https://github.com/xiaosongshine/djangoWebs 安装django插件 pip install django-contrib-comments配置settings.py INSTALLED_APP(#...,django_com…

一周工作60个小时并不值得骄傲,这是个问题!

本文由 极客范 - yesky 翻译自 Jeff Archibald。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。当我们声称自己在这周&#xff0c;上周或是上个月超负荷地工作了多少时间时&#xff0c;一种自豪感便会油然而生。 我之所以这么说是因为…

DOM的那些事

到底调用函数时要不要加&#xff08;&#xff09;&#xff1f; 在html中&#xff0c;onclick后必须接字符串调用&#xff0c;而在js中则必须接函数进行调用。 addEventListener和click区别 onclick只是一个属性&#xff0c;且是唯一的。其只能绑定一个事件&#xff0c;容易在不…

解决 -- 代码没有问题时接口报错:Status Code: 404 Not Found

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 我能确定这个工程的接口代码肯定没有问题&#xff0c;这时请求接口依旧报 404。 如&#xff1a; 经过多方检查 最终确认问题原因&…

java版开源工作流引擎ccflow从表数据数据源导入设置

为什么80%的码农都做不了架构师&#xff1f;>>> 关键字驰骋工作流引擎 流程快速开发平台 workflow ccflow jflow .net开源工作流 从表数据导入设置 概要说明在从表的使用中我一般都会用到从数据库引入一些数据到表单中&#xff0c;这时候就需要有一个功能能够查询…