最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript給input的value賦值引發(fā)的關(guān)于基本類型值和引用類型值問題

 更新時間:2015年12月07日 09:12:51   作者:Blueprison  
這篇文章主要介紹了JavaScript給input的value賦值引發(fā)的關(guān)于基本類型值和引用類型值問題的相關(guān)資料,需要的朋友可以參考下

 在自己做東西時,遇見了一個問題。就拿博客園的首頁右邊的搜索舉例吧,用控制臺操作。

   

  

  現(xiàn)在我需要從另外一個地方將數(shù)據(jù)傳給input,讓其在一刷新的時候就顯示數(shù)據(jù)。

  這不難啊,于是我按照我的理解做了

  代碼如下:

  

  此時,id為zzk_q的值應(yīng)該為  測試  ,即input框內(nèi)應(yīng)該顯示 測試 。但結(jié)果。。

  

  咦,為什么沒有變呢,不對啊,又來來回回變著法子試一下,還是不行,當(dāng)然代碼基本還是那樣子的。突然想起我以前遇見過這樣子的問題,仔細(xì)回想當(dāng)時解決的方法(看樣子當(dāng)時沒理解透,只是找到方法就過去了),想起來了,我試一下,代碼如下:

  看結(jié)果:

 

  這次成了。第一次遇見這個問題時沒有細(xì)想,成功了就跳過了。但這次我開始想為什么呢?為什么呢?怎么會這樣啊,沒辦法理解啊。然后我自己在哪里來回折騰,但還是想不明白。同樣是賦值這倆者有什么差別嗎?差別在哪里???后來才知道是值類型和引用類型,當(dāng)然是別人給我指出來的(……)。

  然后我就去找這方面的東西看,發(fā)現(xiàn)這東西我看過,汗。

  自1997年Javascript被標(biāo)準(zhǔn)化以來,它定義了六種基本類型。直到ES6,JS程序中任何一個值都屬于以下幾種類型之一。

 •Undefined
 •Null
 •Boolean
 •Number
 •String
 •Object

  不過,ES6又加了一個基本類型:Symbol 類型。這個沒多大了解,不作討論,等以后熟悉再說吧,又要學(xué)。

  在JavaScript的變量中,有倆種類型的值:基本類型和引用類型的值?;绢愋椭担ㄒ灿腥朔Q為值類型)是簡單地數(shù)據(jù)段,它是按值訪問的,并對其中的值進(jìn)行操作。而引用類型值值那些有可能有多個值構(gòu)成的對象。賦值的時候,解釋器必須確定值是基本類型還是引用類型。

  基本數(shù)據(jù)類型有:Undefined、Null、Boolean、Number、String。引用類型是保存在內(nèi)存中的對象,即Object,對象是方法和屬性結(jié)合。

  1.類型值的動態(tài)屬性

  這是引用類型:

var person = new Object();   
person.name = "foo";
console.log(person.name);//foo
delete person.name;
console.log(person.name)://undefined 

  這個例子中,我們先創(chuàng)建了一個空對象,然后將其保存在person變量中,然后給對象添加了一個屬性name,而且給這個屬性賦值了一個字符串“foo”,然后輸出,可以看到輸出了字符串foo,然后我們將這個屬性刪除,輸出undefined。這些說明,我們可以動態(tài)的給對象添加屬性和方法,如果不銷毀對象或者刪除屬性,將會一直存在。

  這是基本類型:

var name = "foo";
name.age = 22;
console.log(name.age);//undefined

   在這個中,我們將一個字符串"foo",保存在一個name變量中,然后也給它添加了一個屬性age,并賦值22,然后輸出,像我以前想的那么該輸出22,但實際情況是undefined。

  這個是否可以理解為基本類型的值是不可變的,而引用類型是可以動態(tài)改變的。

  2.復(fù)制變量值

  和上面說的一樣,基本類型是按值訪問的。而引用類型呢,在JavaScript和其它語言不同,允許直接訪問內(nèi)存中的位置,也就是說我們不可以直接操作對象的內(nèi)存空間,那怎么辦呢?在操作對象時,實際上是對操作對象的引用,引用類型的值是按引用對象訪問的。引用類型的存儲需要內(nèi)存的棧內(nèi)存和堆內(nèi)存共同完成,棧內(nèi)存保存變量標(biāo)識符和指向堆內(nèi)存中該對象的指針,也可以說是該對象在堆內(nèi)存的地址。

  先看例子:

var num1 =5;
var num2 =num1;//5
num1+=1; //6
num2;//5 

 從一個變量向另一個變量復(fù)制基本類型的值,我們會在變量對象上重新創(chuàng)建一個新值,然后把該值復(fù)制到新變量分配的位置上。這倆個值是完全對立的,對倆個變量進(jìn)行其他操作是互不影響的。它們應(yīng)該是保存在棧內(nèi)存中,如下圖所示:

 

  看一下引用類型: 

var obj1 = new Object();
var obj2 = obj1;
obj1.name = "foo";
console.log(obj2.name);  //foo
obj2.age = 22;
console.log(obj1.age);  //22 

  當(dāng)從一個變量想另一個變量復(fù)制引用類型的的值時,也會將該值復(fù)制一份放到新的空間中。但是就跟上面說的一樣,引用類型的存儲要棧內(nèi)存和堆內(nèi)存一起完成,這個值實際上是一個指針,而這個指針指向存儲在堆中的一個對象。復(fù)制操作結(jié)束后,倆個變量實際上是同一個指針,也就是引用同一個對象。所以,改變其中的一個變量,另一個變量也會隨之改變。如下圖:


參看 JavaScript高級程序設(shè)計。

  這樣一梳理,就對一開始的問題有些明白了,開頭那個錯誤,一開始,取到input的value(此時為空),復(fù)制給title,然后以改變title期望改變input的value。但input的value(可以看成一個變量)就是一個基本類型,復(fù)制后,它倆完全獨立了,互不影響。再說成功的,將value拿出來,先將input(對象)復(fù)制給title,然后給title添加value屬性,并賦值,此時倆個指向同一個對象,改變一個,也會影響另外一個。恩,就這樣子。

  雖然很多知識從書上或其他地方看了一遍或多遍,但是等你真正遇到時感覺好奇怪。怎么會這樣,然后自己去找答案。等找到或是別人指出后,才發(fā)現(xiàn)這個以前看見過,有些甚至自己解決過(不能說解決,只能說沒有深究,沒有徹底弄懂)。還有一些大學(xué)的基礎(chǔ)都忘的七七八八了(本來就學(xué)的不好)。連棧內(nèi)存和堆內(nèi)存都去搜了一下。恩,既然決定走這條路了,就好好學(xué)習(xí)吧。 

  最后:

Good good coding,day day up!

PS:(集合和引用類型、基本數(shù)據(jù)類型賦值不一樣)一個簡單的java問題 先后的賦值問題

<span style="white-space:pre">  </span>List<person> list = new ArrayList<person>(); 
<span style="white-space:pre">  </span>person pp = new person(); 
<span style="white-space:pre">  </span>list.add(pp); 
<span style="white-space:pre">  </span>pp.setIvalue(12); 
<span style="white-space:pre">  </span>pp.setIvalue(20); 
<span style="white-space:pre">  </span>pp = null;; 
<span style="white-space:pre">  </span>int b = 0; 
<span style="white-space:pre">  </span>int a = b; 
<span style="white-space:pre">  </span>b = 8; 
<span style="white-space:pre">  </span>System.out.println(a); 
<span style="white-space:pre">  </span>for (person ppp : list) { 
<span style="white-space:pre">   </span>ppp.getIvalue(); 
<span style="white-space:pre">  </span>} 
<span style="white-space:pre"> </span> 

list里面的對象加進(jìn)去就改不了,但是可以修改對象里面的屬性值。

簡單string里面的值就改變不了

結(jié)果:

11 
8888  

切記:最好還是按正常來寫,避免混淆

相關(guān)文章

  • javascript的currying函數(shù)介紹

    javascript的currying函數(shù)介紹

    curring的概念將函數(shù)式編程的概念和默認(rèn)參數(shù)以及可變參數(shù)結(jié)合在一起.一個帶n個參數(shù),curried的函數(shù)固化第一個參數(shù)為固定參數(shù),并返回另一個帶n-1個參數(shù)的函數(shù)對象,分別類似于LISP的原始函數(shù)car和cdr的行為。currying能泛化為偏函數(shù)應(yīng)用(partial function application, PFA),p 這種函數(shù)將任意數(shù)量(順序)的參數(shù)的函數(shù)轉(zhuǎn)化為另一個帶剩余參數(shù)的函數(shù)對象
    2012-02-02
  • JS組件庫AlloyTouch實現(xiàn)圖片輪播過程解析

    JS組件庫AlloyTouch實現(xiàn)圖片輪播過程解析

    這篇文章主要介紹了JS組件庫AlloyTouch實現(xiàn)圖片輪播組件過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • JavaScript ES6的函數(shù)拓展

    JavaScript ES6的函數(shù)拓展

    這篇文章主要介紹了JavaScript ES6的函數(shù)拓展,
    2022-01-01
  • js實現(xiàn)盒子拖拽動畫效果

    js實現(xiàn)盒子拖拽動畫效果

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)盒子拖拽動畫效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Ajax異步提交表單數(shù)據(jù)的說明及方法實例

    Ajax異步提交表單數(shù)據(jù)的說明及方法實例

    Ajax異步提交表單數(shù)據(jù)的說明及方法實例,需要的朋友可以參考一下
    2013-06-06
  • JavaScript 對Cookie 操作的封裝小結(jié)

    JavaScript 對Cookie 操作的封裝小結(jié)

    通過本篇,您能了解到: 匿名函數(shù) 閉包的產(chǎn)生 JavaScript實現(xiàn)private 以及 public 訪問權(quán)限 document.cookie 的操作
    2009-12-12
  • 對 lightbox JS 圖片控件進(jìn)行了一下改造, 使其他支持復(fù)雜的圖片說明

    對 lightbox JS 圖片控件進(jìn)行了一下改造, 使其他支持復(fù)雜的圖片說明

    如果要為圖片添加詳細(xì)的圖片說明,并為圖片的說明設(shè)置一些格式,如字體的大小、顏色等,那么使用 title 這個屬性來設(shè)置這些說明信息是沒辦法實現(xiàn)的。
    2010-03-03
  • JavaScript正則表達(dá)式和級聯(lián)效果

    JavaScript正則表達(dá)式和級聯(lián)效果

    正則表達(dá)式(regular expression)是一種字符串匹配的模式,用來檢查一個字符串中是否包含指定模式的字符串。下面通過本文給大家分享JavaScript_正則表達(dá)式和級聯(lián)效果,感興趣的朋友一起看看吧
    2017-09-09
  • js實現(xiàn)數(shù)字拼圖

    js實現(xiàn)數(shù)字拼圖

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)數(shù)字拼圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • JavaScript中使用Spread運算符的八種方法總結(jié)

    JavaScript中使用Spread運算符的八種方法總結(jié)

    這篇文章主要給大家介紹了JavaScript中使用Spread運算符的八種方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用JavaScript具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評論

东宁县| 贵阳市| 江安县| 讷河市| 荔浦县| 温州市| 兴和县| 武强县| 日喀则市| 余干县| 江西省| 绍兴市| 南涧| 分宜县| 桦甸市| 绥化市| 丰城市| 雅江县| 潼关县| 和田县| 城步| 琼海市| 双牌县| 湛江市| 镇平县| 仙游县| 禹州市| 阜城县| 射洪县| 青冈县| 红原县| 怀柔区| 临沧市| 将乐县| 图片| 岳西县| 新民市| 惠东县| 邢台市| 沂源县| 阳西县|