基本變量和引用變量

基本數據類型作比較,值相等則相等,值不相等則不相等(忽略數據類型)

引用類型作比較,引用地址相等則相等,否則都是不等的。

基本數據類型,和引用數據類型作比較,是比較值是否相等(忽略數據類型)

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.pswp.cn/news/449447.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449447.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449447.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

真格量化-持倉量第n檔賣方主力跟隨策略

#!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import time import numpy as np import pandas as pd #日線級別 #開始時間,用于初始化一些參數 def OnStart(context):print("I\m starting...")#設定一個全局變量品種,本策略交易50E…

賺大錢必備 怎樣成為賺錢高手(圖)

1、一旦有賺錢的念頭就馬上一步一個腳印去做&#xff0c;要付諸行動&#xff0c;敢于碰&#xff0c;善于磨&#xff0c;只有這樣才能抓住機會。 2、想賺錢&#xff0c;就要立志當商人&#xff0c;而且目標要高&#xff0c;選定十萬、二十萬&#xff0c;再是一百萬、五百萬。 …

不定長圖片驗證碼訓練

基于LSTM和CTCLoss訓練不定長圖片驗證碼 Github項目地址&#xff1a;https://github.com/JansonJo/captcha_ocr.git # codingutf-8 """ 將三通道的圖片轉為灰度圖進行訓練 """ import itertools import os import re import random import strin…

[云框架]KONG API Gateway v1.5 -框架說明、快速部署、插件開發

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 當前版本采用KONGv0.12.3 當我們決定對應用進行微服務改造時&#xff0c;應用客戶端如何與微服務交互的問題也隨之而來&#xff0c;畢竟…

真格量化-主力跟買策略

#!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import time import numpy as np import pandas as pd #日線級別 #開始時間,用于初始化一些參數 def OnStart(context):print("I\m starting...")#設定一個全局變量品種,本策略交易50E…

頂級投資者的21條箴言(組圖)

每天你都會聽見五花八門的投資建議&#xff0c;告訴你應該買入還是賣出。如果這讓你感到無所適從&#xff0c;不妨靜下心來&#xff0c;聽聽歷史上最成功的投資者的建議。 我們搜集了21位頂尖大牛的投資箴言&#xff0c;以饗讀者。 1、George Soros&#xff1a;好的投資總是無…

python 游戲 —— 漢諾塔(Hanoita)

一、漢諾塔問題 1. 問題來源 問題源于印度的一個古老傳說&#xff0c;大梵天創造世界的時候做了三根金剛石柱子&#xff0c;在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規定&#xff0c;在小圓…

Base62x比Base64的編碼速度更快嗎?

現在幾乎所有企事業單位、政府機構、軍工系統等的IT生產系統都會用到Base64編碼&#xff0c;從RSA安全密鑰到管理信息系統登錄入口回跳&#xff0c;目前越來越多的IT系統研發者開始使用 Base62x 替換 Base64. -Base62x 提供了一種無符號輸出的Base64的編碼方案&#xff0c;在許…

對Docker常用命令的整理

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 查看docker版本信息、 #docker version #docker -v #docker info image鏡像操作命令 #docker search image_name //檢索image #docker p…

再說千遍萬遍,都不如這四句話管用,不服不行!

一、健康是最大的利益    人有時候&#xff0c;真不知要謀求什么&#xff1f;往往把最值得維護和珍貴的東西忽視了&#xff0c;卻不知揀了芝麻丟了西瓜。   現在好多人都在透支健康&#xff0c;燃燒生命&#xff0c;經常借口工作忙、應酬多&#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

真格量化-歷史波動率

#!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import time import numpy as np #日線級別 #開始時間,用于初始化一些參數 def OnStart(context):print("I\m starting...")#設定一個全局變量品種,本策略交易50ETF期權g.code = "…

DevOps團隊結構類型匯總:總有一款適合你

前言 組織中任何DevOps工作的主要目標都是改進客戶和業務的價值交付&#xff0c;而不是降低成本、提升自動化或者通過配置管理驅動一切&#xff1b;這意味著&#xff0c;為了實現有效的Dev和Ops協同&#xff0c;不同的組織可能需要不同的團隊結構。 概述 具體哪種DevOps團隊結構…

magic

轉載于:https://www.cnblogs.com/P201821430028/p/10611080.html

真格量化-bs套利

#!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import time import numpy as np from copy import *#開始時間,用于初始化一些參數 def OnStart(context) :context.myacc = None#登錄交易賬號if context.accounts["回測期權"].Login…

人生歷練必備的十個心態(圖)

成功源自心態&#xff0c;如果為自己鑲嵌上雄心、信心、決心、愛心、專心、誠心、耐心、恒心、虛心、靜心這十顆心&#xff0c;不斷打造自己的心態&#xff0c;你就一定會取得人生的成功! 第一個&#xff1a;雄心 你應該讓自己試著從人生的地平線上躍起。 第二個&#xf…

【docker】常用docker命令,及一些坑

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 查看容器的root用戶密碼 docker logs <容器名orID> 2>&1 | grep ^User: | tail -n1因為docker容器啟動時的root用戶的密碼…

kubernetes系列10—存儲卷詳解

kubernetes系列10—存儲卷詳解 1、認識存儲卷 1.1 背景 默認情況下容器中的磁盤文件是非持久化的&#xff0c;容器中的磁盤的生命周期是短暫的&#xff0c;這就帶來了一系列的問題&#xff1a;第一&#xff0c;當一個容器損壞之后&#xff0c;kubelet 會重啟這個容器&#xff0…

真格量化-隱含波動率計算

#!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import time import numpy as np from copy import *#開始時間,用于初始化一些參數 def OnStart(context) :context.myacc = None#登錄交易賬號if context.accounts["回測期權"].Login…

Vue 后臺管理

這里是結合vue和element快速成型的一個demo 里面展示了基本的后臺管理界面的大體結構和element的基本操作 GitHub的地址&#xff1a;https://github.com/wwwming/adminDemo 轉載于:https://www.cnblogs.com/wangming1002/p/10613014.html