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

什么是JavaScript中的結(jié)果值?

 更新時(shí)間:2016年10月08日 15:22:17   作者:蘇福  
你知道JavaScript中的結(jié)果值是什么嗎?這篇文章主要介紹了JavaScript結(jié)果值,感興趣的小伙伴們可以參考一下

你知道JavaScript中的每條語句、甚至表達(dá)式都有一個(gè)結(jié)果值嗎?

當(dāng)你在瀏覽器中測(cè)試代碼時(shí),經(jīng)常會(huì)在控制臺(tái)的輸出結(jié)果的最后面多出一條,大部分為undefined,這個(gè)undefined就是一個(gè)結(jié)果值。

ES7的do表達(dá)式

先從ES7的一個(gè)提案說起吧:do表達(dá)式do{...}(注意:不是do{...}while();中的do)

var a,b,c = 3;
a = do {
   if (true) {
      b = c*3;
   }
};
a; //9 目前的瀏覽器暫不支持

表達(dá)式do{...}的作用就是返回它后面的語句塊的結(jié)果值,功能其實(shí)和return類似,只不過return需要通過函數(shù)來封裝后調(diào)用。

不過目前來說,我們還無法使用上面的功能,目前的規(guī)范是不允許我們獲得語句的結(jié)果值并將其賦值給一個(gè)變量的(除了使用eval(),如var a = eval('if (true) {b = c*3;}'),a的值被賦值為eval()內(nèi)的語句的結(jié)果值,不建議使用eval())。

ES5規(guī)范關(guān)于結(jié)果值的規(guī)定

現(xiàn)在你應(yīng)該大概理解了什么是結(jié)果值了,本人翻看了ES5規(guī)范,發(fā)現(xiàn)JavaScript中,語句塊、語句、甚至表達(dá)式都會(huì)隱式地返回一個(gè)結(jié)果值,總結(jié)如下:
結(jié)果值是語句、表達(dá)式經(jīng)過邏輯運(yùn)算后的值,若無邏輯(按順序執(zhí)行)則為最后一條子語句、表達(dá)式的結(jié)果值(語句可以包含子語句),簡(jiǎn)單地說它就是一個(gè)語句、表達(dá)式的“隱式的返回值”,JavaScript會(huì)計(jì)算每一條語句、表達(dá)式并返回一個(gè)結(jié)果值,而對(duì)于語句塊的結(jié)果值,它是最后一條最外層語句的結(jié)果值(非嵌套的子語句)。

部分瀏覽器會(huì)在控制臺(tái)輸出一段代碼的最后一條語句或語句塊的結(jié)果值(本文所有代碼均使用Firefox測(cè)試,不同瀏覽器有差別)

結(jié)果值可以為任何表達(dá)式的值,也可以為空(;、break;、continue;),為空時(shí)結(jié)果值為undefined。當(dāng)結(jié)果值為空時(shí),瀏覽器會(huì)忽略該語句,而打印出上一條同級(jí)的非空的語句,若僅有自身一條同級(jí)語句則打印出undefined。

特例:var變量聲明語句、函數(shù)聲明語句的結(jié)果值為undefined。

1、變量聲明語句算法的返回值實(shí)際為表示該變量名稱的字符串,但是這個(gè)值被變量語句算法屏蔽掉了(for...in循環(huán)除外),最后返回結(jié)果為undefined
2、而對(duì)于函數(shù)聲明語句,它的結(jié)果值本人按規(guī)范解讀為該函數(shù)對(duì)象,但瀏覽器顯示為undefined,具體什么原因,本人還不理解(可能是因?yàn)楹瘮?shù)只是定義,未被實(shí)際執(zhí)行的原因);
3、函數(shù)執(zhí)行語句的結(jié)果值為:
3.1 若有throw語句,則為throw語句的結(jié)果值
3.1 若有return語句,則為return語句的結(jié)果值
3.2 若無throw、return語句則為undefined

例子:

var a,b,c = 3;
if (true) {b = c*3;} //按順序執(zhí)行到最后一條語句,輸出9
; //undefined 單獨(dú)的空語句
var d = 5; //undefined 所有的var聲明語句的結(jié)果值均為undefined

function foo(a){
 a = a+2;
 return a;
}
//undefined 函數(shù)聲明語句的最終結(jié)果值也為undefined
foo(1); //3 函數(shù)執(zhí)行語句的結(jié)果值為函數(shù)throw、return語句的結(jié)果值,若無throw、return語句,則為undefined
if(true){a=1;}else{b=2;} //1 按邏輯計(jì)算結(jié)果執(zhí)行a=1;語句

{
 var a = 1,b = 2;
 if(true){a;}else{b;} //輸出1,最后一條空語句會(huì)被忽略
 ;
}
var a = 5;
switch(a){
 case 1:
  a+1;
  break;
 case 5:
  a+5;
  break;
 case 3:
  a+3;
  break;
}
//10 空的break;語句會(huì)被忽略
var a = 5;
switch(a){
 case 1:
  a+1;
  break;
 case 5:
  break; //執(zhí)行這里,它這里無同級(jí)語句
 case 3:
  a+3;
  break;
}
//undefined 

下面來具體看看表達(dá)式的結(jié)果值有什么用:
大部分表達(dá)式只有結(jié)果值,沒有副作用,如:var a = 2; var b = a + 3;,這里的表達(dá)式a+3的結(jié)果值為5,被賦值給了b。

而有副作用的表達(dá)式,如:

function foo(){
  a++;
}
var a=0;
foo(); //結(jié)果值為undefined,副作用是改變了a的值

又如:

var a = 0; 
var b = a++;
a; //1
b; //0
var c = a++; //結(jié)果值為undefined 副作用是c被賦值了,a變成了2 
var d = a++, a; //結(jié)果值為undefined,副作用是d被賦值為2,a變成了3,實(shí)際執(zhí)行的是var d = a++;
var d = (a++,a);//結(jié)果值為undefined,副作用是d被賦值為3,a變成了3,實(shí)際執(zhí)行的是var d = ++a;
function foo(){
  var e = f = 1;  //表達(dá)式f=1的結(jié)果值為1,1又被賦值給e
}
foo();
f; //1 創(chuàng)建了全局變量f
e; //ReferenceError

賦值語句的副作用是將'='右邊的表達(dá)式的結(jié)果值賦值給了左邊的變量,最終整個(gè)賦值語句的結(jié)果值為變量的值,為此我們可以這樣:

function foo(a){
  var b;
  if(a&&(b = a*10;)<50){
    ...
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • javascript中獲取元素標(biāo)簽中間的內(nèi)容的實(shí)現(xiàn)方法

    javascript中獲取元素標(biāo)簽中間的內(nèi)容的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄猨avascript中獲取元素標(biāo)簽中間的內(nèi)容的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-10-10
  • 前端JavaScript經(jīng)典操作之?dāng)?shù)組常用方法總結(jié)

    前端JavaScript經(jīng)典操作之?dāng)?shù)組常用方法總結(jié)

    數(shù)組操作是JavaScript中非常重要也非常常用的技巧,這篇文章主要給大家介紹了關(guān)于前端JavaScript經(jīng)典操作之?dāng)?shù)組常用方法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • javascript委托(Delegate)blur和focus用法實(shí)例分析

    javascript委托(Delegate)blur和focus用法實(shí)例分析

    這篇文章主要介紹了javascript委托(Delegate)blur和focus用法,實(shí)例分析了javascript委托的用法及針對(duì)常見瀏覽器的使用技巧,需要的朋友可以參考下
    2015-05-05
  • JS中onpropertychange和onchange事件區(qū)別小結(jié)

    JS中onpropertychange和onchange事件區(qū)別小結(jié)

    當(dāng)一個(gè)HTML元素的屬性用js改變的時(shí)候,都能通過onpropertychange來捕獲。例如一個(gè)文本text對(duì)象的value屬性被頁面的腳本修改的時(shí)候,onchange無法捕獲到,而onpropertychange卻能夠捕獲。
    2010-07-07
  • fabric.js實(shí)現(xiàn)diy明信片功能

    fabric.js實(shí)現(xiàn)diy明信片功能

    這篇文章主要為大家詳細(xì)介紹了fabric.js實(shí)現(xiàn)diy明信片功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • 選擇與取消選擇不錯(cuò)的應(yīng)用 js

    選擇與取消選擇不錯(cuò)的應(yīng)用 js

    選擇與取消選擇不錯(cuò)的應(yīng)用 js...
    2006-12-12
  • JavaScript中new操作符的原理示例詳解

    JavaScript中new操作符的原理示例詳解

    javascript中的new是一個(gè)語法糖,new的過程實(shí)際上是創(chuàng)建一個(gè)新對(duì)象,把新象的原型設(shè)置為構(gòu)造器函數(shù)的原型,這篇文章主要給大家介紹了關(guān)于JavaScript中new操作符原理的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • 最新評(píng)論

    南部县| 沅江市| 鄄城县| 镶黄旗| 招远市| 宜春市| 商河县| 阿克苏市| 灵石县| 三台县| 吉安市| 盱眙县| 阿克陶县| 林口县| 常州市| 灵寿县| 聂拉木县| 洞头县| 铜陵市| 襄樊市| 淮滨县| 抚州市| 霍邱县| 淄博市| 平阳县| 和顺县| 宜良县| 砀山县| 元朗区| 雷山县| 中江县| 永嘉县| 白水县| 绥中县| 温宿县| 海丰县| 门头沟区| 镇坪县| 苗栗县| 龙泉市| 石渠县|