氣候峰會前歐亞示威者上街 籲當局對抗暖化

摘錄自2019年11月30日中央通訊社德國報導

全球有成千上萬示威者今天走上街頭,歐洲和亞洲占多數,呼籲當局採取行動對抗全球暖化,期望在聯合國(UN)氣候峰會展開的數日前,向全球領導者施壓。

抗議民眾舉著看板寫著「一個地球,一場抗爭」和「海平面在湧升,我們也湧入街頭」。數以千計的群眾聚集在柏林布蘭登堡大門(Brandenburg)參與最新一場「週五為未來而戰」(Fridays for Future)抗議行動,受16歲瑞典環保少女童貝里(Greta Thunberg)先前發起的同名運動啟發。

「週五為未來而戰」運動表示,德國各地超過500座城市,總共有約63萬人上街示威。德國警方表示,光是漢堡就聚集3萬人左右,大多是年輕人,而慕尼黑則集結1萬7000人,他們為了平均地表溫度逐漸上發出警告。

童貝里正搭乘帆船橫渡大西洋,並在推特上傳她舉著寫有「為氣候罷課」標語看板的圖片。這次示威浪潮席捲全歐洲,不過規模仍小於9月「氣候大罷課」的規模。當時籌辦方表示,全球各大城市約400萬人佔據街頭。

為期12天的聯合國氣候變化綱要公約第25次締約方會議(COP25)將於下周展開,目標是鼓勵各國政府減少溫室氣體排放和對抗氣候變遷。這次COP25主辦城市馬德里今天有約1700名示威人士參與。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

新北清潔公司,居家、辦公、裝潢細清專業服務

亞馬遜經濟開發引衝突 NGO不畏強權抗爭多年

摘錄自2019年11月30日中央通訊社巴西報導

環境保護與經濟發展孰輕孰重一直是受到矚目的議題。巴西亞馬遜雨林主要觀光目的地之一Alter do Chao聚落一直受到開發商青睞,當地NGO不畏強權,守護土地,抗爭多年。

巴西北部巴拉州刑警3天前拘捕Alter do Chao社區消防隊4名志工消防員,指控他們在亞馬遜雨林故意製造火災,以獲取國際金援,引起當地社運人士、原住民和環保團體抗議。

在近百個非政府組織(NGO)聯合施壓下,巴西法院昨天(29日)傍晚下令釋放這4名協助撲滅該地區森林火災的非政府組織Alter do Chao社區消防隊成員,但當地與非政府組織的緊張關係已經持續幾10年。

桑塔林觀光局指出,2018年約19萬名遊客造訪Alter do Chao。該地區的旅遊熱潮使村莊周圍地區,房地產開發商具有強烈的開發興趣。一方面,有強大的地方家族勢力和企業家主張在以清澈的河水和白色的沙灘而聞名的塔巴鳩斯(Tapajos)河沿岸建造大型酒店和度假村。另一方面,社運人士、例如與被逮捕的Alter do Chao社區消防隊有聯繫的環保團體,則主張對環境衝擊較小的旅遊業,以保留該區域的特點,並防止傳統社區被驅逐趕離。

巴拉聯邦大學(Ufpa)社會學家托瑞斯(Mauricio Torres)指出,Alter do Chao的爭議邏輯不同於亞馬遜其他區域,當地的旅遊文化、環境保護與經濟開發衝突,才是促成逮捕志工消防員的真實背景。

托瑞斯說,這是屬於一個一直在擴大發展的城市的衝突,有傳統社區面臨被驅逐趕離的壓力,但幕後推手不是木材商或農牧場,而是聚焦於旅遊業的房地產投機與開發。

有論點指出,巴拉州刑警對志工人員進行預防性拘留,指控他們自行引發火災,之後加以撲滅,以獲取國際機構的金援。但一名不願具名、害怕遭到報復的聯邦公務員告訴巴西媒體,社運人士、大學生和原住民強烈反對,致使提案沒有取得進展,所以在當地活動的環保團體都相信逮捕志工消防員的行動含政治動機。巴拉州長巴爾巴柳(Helder Barbalho)昨天已宣布撤換負責此案的警長,並質疑行動的合法性。

聯邦檢察廳自2015年以來進行的調查指出,非法佔領土地和房地產投機,是導致Alter do Chao環境退化的因素,「由於該地區是巴西最著名的度假勝地之一,成為旅遊和房地產業的爭相競奪的目標,且經常受到公共土地入侵者的壓力。」

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

控制暖化不超過2°C 燃煤電廠需大規模改建更新 | 解讀《 2019年世界能源展望》報告1/3

環境資訊中心外電;姜唯 翻譯;林大利 審校;稿源:Carbon Brief

國際能源署(IEA)13日發表報告。報告中指出,全球能源系統正在進行「深層更新」,但儘管如此,除非積極度再提升,否則全球的二氧化碳排放量還是會繼續增長數十年。

今年810頁版本的特點在於「承諾政策情境(Stated Policies Scenario, STEPS)」(以前稱為「新政策情境」),反映政府已經說出口的政策的效果。風能和太陽能的激增將使再生能源滿足全球能源需求的大部分成長。但是煤炭的平穩發展,加上對石油和天然氣的需求不斷增加,全球排放量在到2040年的展望期內將繼續上升。

相對地,報告的「永續發展情境(Sustainable Development Scenario, SDS)」描繪出有50%機率將升溫限制在1.65°C內所需的條件,IEA表示這是「完全符合巴黎協定」的情況。

報告說,SDS需要投資「大量重新分配」,從化石燃料轉向效率和再生能源、淘汰全球約一半的燃煤電廠,以及全球經濟的其他變化。

IEA今年還探討了將升溫限制在工業化前1.5°C內(即巴黎協定的理想目標)所需條件,不過沒有建立詳細模型。

未來情境

《世界能源展望》(WEO)是這個主題的年度出版物中審查最嚴格的報告之一。長達數百頁的分析以世界各國政府的數千個資料庫和IEA的世界能源模型為基礎。

IEA表示報告沒有對前景預測。相反地,它以二氧化碳排放量和其他資料形式呈現了特定能源選擇的後果。該報告說明道:

「《世界能源展望》的目的不是提供一個關於2030年或2040年世界能源將在何處的觀點。這將取決於未來的各種重大選擇。 WEO-2019的目的是,提供決策者制訂新政策、考慮新投資或以其他方式塑造能源未來時所需的資訊。透過探索各種可能的未來、實現的方式、不同選擇的後果以及一些關鍵的不確定性來做到這一點。」

引言中介紹了三種可能的「前景」,在報告發表前,部落格文章「了解WEO情境」也提前對此做了說明。

展望報告的中心觀點是「STEPS」,它的目的是「在不預期未來有所改變的情況下,讓政策制定者好好審視自己的計畫和積極度會有何表現」,包括政府做出的巴黎氣候承諾。不過,IEA並不認為所有政策目標都會實現:

「積極度不會自動被納入情境中:徹底落實不是理所當然的,因此政策落實的前景和時機是以我們對相關監管、市場、基礎建設和財務限制的評估為基礎。」

承諾政策包括零排放淨目標,如英國的目標。 IEA表示,已商定或討論中的類似目標(包括歐盟)涵蓋了全球排放量的12%。就解決全球排放而言,這些目標很重要,但不是決定性的。IEA表示,為實現零排放目標而開發的技術和方法可能會產生更大的連鎖反應,這可能有助於其他國家減少排放。

WEO的第二個未來情境是「永續發展情境(SDS)」。這個情境從能源獲取、空氣污染和碳排放方面的永續發展目標開始,探討達到目標所需的條件。

最後,在「當前政策情境(Current Policies Scenario, CPS)」中,政府放棄其承諾目標和意圖,能源系統僅以已經制定好的政策和法律為指導。

今年的報告文字、圖表和數據將繼續提到CPS,只是重要性較低,「當前政策情境」這個詞在810頁中僅使用了102次,遠少於STEPS的793次和SDS的535次。報告也說明,CPS就是不採取行動的後果,可看出STEPS情境所需的額外努力。

(2010年《世界經濟展望》 中,CPS被提及了340次,而當時的中心觀點NPS出現981次,「450種情境」出現745次。)

需求上升

IEA表示,根據全球已承諾的計畫和政策,到2040年,全球能源需求將繼續每年增長1%,相當於中國目前的總需求量。

根據國際貨幣基金組織(IMF)的預測,人口增加(根據聯合國的「中等」預測,2040年將達到90億人口)和經濟持續擴大(全球GDP每年增加3.4%)推動了這個成長。

IEA表示,由於產業轉向低能耗,能源效率的提高和「飽和效應」(如汽車需求封頂),2019年能源需求的成長率大約是2000年以來平均2%的一半。

如下圖中的紅線所示,STEPS中再生能源將滿足約49%的需求增長。天然氣的使用也預期將迅速增加(藍色),超過煤炭成為僅次於石油的第二大能源,並滿足總體需求增長的三分之一。

1990年至2040年全球各類型能源需求量,單位是數百萬噸石油當量。未來需求預測以STEPS為基礎。其他再生能源包括太陽能、風能、地熱能和海洋能。資料來源:國際能源署《 2019年世界能源展望》。Carbon Brief使用Highcharts繪製圖表。

與天然氣和再生能源的快速發展相比,IEA STEPS情境預測煤炭使用量將達到平穩,然後從今日的水平略降(上方黑線)。這呼應去年的分析,即全球煤炭需求在2014年達到頂峰。

IEA現在還建議,由於汽車燃油效率的提高和電動汽車(EV)的增加,到2030年(橙色線)石油需求將開始趨於穩定,這將使汽車的石油需求在2020年代末期達到峰值。報告說,由於電動汽車成本下降,傳統汽車的未來將是值得深思的問題。

IEA表示,貨運、航運、航空和化學產品的石油需求「持續增長」,SUV因日益普及,成為另一個潛在的需求支撐因素。(值得注意的是,阿拉伯國家石油公司的股票銷售文件也顯示,全球石油需求將從2035年左右開始趨於穩定。)

根據IEA STEPS,到2040年,全球能源需求增長的三分之二來自亞太地區。印度成為世界上人口最多的國家,其能源需求成長一倍,成為全球需求成長的最大貢獻者,佔成長總量的四分之一以上。

在這一總數中,STEPS預測亞洲國家對煤炭的需求增加抵消了美國和歐洲的大幅減少。IEA說:

「煤炭需求來自大多數亞洲發展中國家:在煤基礎設施方面的新投資決策已顯著放緩,但是現有的煤電廠和用煤工廠還是很多……為煤炭提供了可觀的發展動力。」

比例變動

STEPS之下,到2040年,再生能源的興起體現了IEA所形容的「深層更新」,但同時也指出了全球能源系統「變動緩慢」的特性,如煤炭長期的需求高原。

需求成長的比例變化顯示在下面圖表中,煤炭、石油和天然氣(藍色色塊)滿足了能源史上的大部分成長(最左欄)。

儘管STEPS之下,再生能源能滿足2040年需求成長一半,而且成長速度因為經濟因素和能源效率變化而放慢(中間欄),但它仍然遠遠沒有限制全球碳排放量(參閱下文)。

如果要阻止全球氣溫上升,需要有更具決定性的變化,如實現IEA SDS(最右欄)。

全球能源需求年均變化量,以百萬噸石油當量為單位。左:歷史變化。中:IEA STEPS。右:IEA SDS。資料來源:國際能源署《 2019年世界能源展望》 。Carbon Brief使用Highcharts繪製。

在STEPS之下可見再生能源所能滿足的需求成長越來越多,化石燃料在全球能源用量的比例將從2018年的81%下降到2040年的74%,SDS之下則下降到58%。

從STEPS到SDS的需要大規模的變革,其中大多數已經在決策者的議程中很久了。報告解釋:

「2018年化石燃料消費補貼的全球價值,幾乎是再生能源和電動汽車補貼以及全球碳定價計畫收入總和的兩倍。這種不平衡使排放儘早達到峰值的任務變得十分複雜。」

SDS之下,2030年代無碳捕集的化石燃料投資將減少至2014年到2018年平均的一半,再生能源、電網和核能方面的投資將翻倍,而在能源效率上的支出將翻兩倍。

IEA表示,這反映了一個事實,即能源效率是解決排放的最重要因素,這表示SDS下2040年的總體需求會略低於今日的水平。

IEA說「提高能源效率很有機會讓全世界實現永續能源目標」,它召集了「全球能源效率緊急行動委員會」來促成進展。

某種程度上這是對數據的回應,數據顯示效率的改善正在放緩,2018年的效率成長率是2010年以來最低的,這「疲軟的氣力」直得「深切關注」。IEA表示「新能源效率政策和加強現有措施的努力相對缺乏」。

較低的需求會帶來連鎖反應,特別是加上再生能源的快速成長。值得注意的是,在SDS之下,對煤炭、石油和天然氣的需求逐漸下降,而煤炭減幅特別大(上方最右欄中的灰色部分)。

在這個總數中,IEA說,電業的煤炭用量受影響最大。到2040年,超過一半的當前燃煤電廠將退役,規模大於全中國目前的容量。

有半數的退役發生在壽命結束之前,如果將升溫保持在2°C以下,那麼投資於全球現有煤電廠的10億美元中,有部分將面臨風險。歐洲222GW燃煤中有約98%、美國276GW中約88%將關閉。

IEA說,在SDS之下,剩餘的燃煤電廠大部分必須「改建或翻新」。他們得在需求高峰和再生能源產出低谷期間運作有限的時間,不然就得大量投資碳捕集與封存(CCS)技術來減排。

今年的展望報告包含了對煤炭開採過程中釋放的甲烷的新分析。分析結果說明,與航空和航運業相比,煤炭開採的暖化效應更大。(1/3,)

‘Profound shifts’ underway in energy system, says IEA World Energy Outlook (1/3) by Simon Evans

The world’s CO2 emissions are set to continue rising for decades unless there is greater ambition on climate change, despite the “profound shifts” already underway in the global energy system.

That is one of the key messages from the International Energy Agency’s (IEA) , published today. This year’s 810-page edition is notable for its renamed central “Stated Policies Scenario” (STEPS), formerly known as the “New Policies Scenario”.

In this scenario, which aims to mirror the outcome of policies already set out by governments, a surge in wind and solar power would see renewable sources of energy meeting the majority of increases in global energy demand. But a plateau for coal, along with rising demand for oil and gas, would mean global emissions continue to rise throughout the outlook period to 2040.

In contrast, the report’s “Sustainable Development Scenario” (SDS) sets out what would be required to give a 50% chance of limiting warming to 1.65C, which the IEA describes as “fully in line with the Paris Agreement”.

It says the SDS would require a “significant reallocation” of investment away from fossil fuels towards efficiency and renewables, as well as the retirement of around half the world’s fleet of coal-fired power stations and other changes across the global economy.

The IEA has this year also explored, but not modelled in detail, what it would take to limit warming to no more than 1.5C above pre-industrial temperatures, the aspirational goal of the Paris Agreement.

Future scenarios

The World Energy Outlook (WEO) is one of the most heavily scrutinised documents in the annual calendar of publications on the topic. Its hundreds of pages of analysis are based on thousands of datapoints, drawn from governments around the world, as well as the IEA’s .

The IEA says that it does not make forecasts in its outlook. Instead, it presents the consequences of societal energy “choices” in terms of CO2 emissions and other outcomes. The report explains:

“The World Energy Outlook does not aim to provide a view on where the energy world will be in 2030 or 2040. This will depend on hugely important choices that lie ahead. What the WEO-2019 does aim to do is to inform decision-makers as they design new policies or consider new investments or shape our energy future in other ways. It does so by exploring various possible futures, the ways that they come about, the consequences of different choices and some of the key uncertainties.”

The outlook spans three alternative “futures”, set out in the introduction and described in a , published ahead of the report’s release, on “understanding the WEO scenarios”.

The outlook’s central scenario is STEPS, which has “the intention to ‘hold up a mirror’ to the plans and ambitions announced by policymakers without trying to anticipate how these plans might change in future”. This includes the made by governments. The IEA does not assume that all policy goals will be met, however:

“[A]mbitions are not automatically incorporated into the scenario: full implementation cannot be taken for granted, so the prospects and timing for their realisation are based upon our assessment of the relevant regulatory, market, infrastructure and financial constraints.”

Stated policies include some net-zero emissions goals, such as . Similar goals agreed or under discussion, including in the EU, cover 12% of global emissions, the IEA says. This makes the targets significant, but not decisive, in terms of tackling the global emissions. But the IEA says there could be larger knock-on effects due to the technologies and approaches developed to meet net-zero targets, which could help others to also cut emissions.

The second WEO future is the “Sustainable Development Scenario” or SDS. This is a different type of scenario that starts from on energy access, air pollution and CO2 emissions before working backwards to show what would be needed to reach them.

Finally, the “Current Policies Scenario” (CPS) would see governments renege on their stated goals and intentions, with the energy system guided only by policies and laws that are already in place.

This year’s outlook continues to feature the CPS in its text, charts and data. But it is afforded lower priority, with the phrase “current policies scenario” used 102 times over 810 pages – far less often than the 793 mentions of the STEPS or the 535 for the SDS. The outlook says the CPS highlights the consequences of inaction and the level of effort required to meet even the STEPS pathway.

(For comparison, the CPS is mentioned 340 times in the , against 981 uses of the then-central NPS and 745 mentions of the “450 scenario”.)

Rising demand

On the basis of stated plans and policies around the world, the IEA says that global energy needs will continue to rise by 1% per year until 2040, adding demand equivalent to China’s current total.

This growth is driven by a rising population – based on the UN’s to reach 9 billion people by 2040 – and an expanding economy, with global GDP increasing by 3.4% a year, per projections.

The rate of energy demand growth is around half the average rate of 2% seen since 2000, the IEA says, due to shifts towards less energy-intensive industries, energy efficiency gains and “saturation effects” – for example, where demand for cars reaches a peak.

Some 49% of demand growth would be met by renewables in the STEPS, as shown with the red line in the chart, below. Gas use is also expected to rise rapidly (blue), overtaking coal to become the second-largest source of energy after oil and meeting a third of the rise in overall demand.

Global primary energy demand by fuel, millions of tonnes of oil equivalent, between 1990 and 2040. Future demand is based on the STEPS. Other renewables includes solar, wind, geothermal and marine. Source: IEA . Chart by Carbon Brief using .

In contrast to the rapid gains for gas and renewables, the IEA STEPS sees coal use plateau and then decline slightly from today’s levels (black line above). This confirms last year’s analysis that global coal demand peaked in 2014.

The IEA now also suggests that oil demand will start to level off by the 2030s (orange line) as a result of vehicle fuel-efficiency gains and the rise of electric vehicles (EVs), which see passenger car oil demand peak in the “late 2020s”. There are “profound questions” over the future of conventional cars, it says, given falling costs for EVs.

Oil demand for freight, shipping, aviation and chemicals “continues to grow”, the IEA says, with the growing popularity of SUVs another potential factor propping up demand. (Notably, documentation for the Saudi Aramco share sale also has global oil demand levelling off from around 2035.)

The global rise of SUVs is challenging efforts to reduce emissions.

If the appetite for heavier & bigger cars continues to grow at a similar pace to the past decade, this would add nearly 2m barrels a day in global oil demand by 2040.

4/

— Fatih Birol (@IEABirol)

Some two-thirds of the increase in global energy demand to 2040 comes from the Asia Pacific region, under the IEA STEPS. India becomes the country and its energy demand doubles, making it the single largest contributor to global growth and accounting for more than a quarter of the total increase.

Within this total, the STEPS sees rising offset large declines in the US and Europe. The IEA says:

“Coal is the incumbent in most developing Asian countries: new investment decisions in coal-using infrastructure have slowed sharply, but the large stock of existing coal-using power plants and factories…provides coal with considerable staying power in the STEPS.”

Shifting shares

The rise of renewables anticipated under the STEPS to 2040 is demonstrative of the “profound shifts” described by the IEA, yet it also points to the “slow moving” nature of the global energy system, as exemplified by the long, high plateau in demand for coal.

These shifting shares of demand growth are shown in the chart, below, with coal, oil and gas (shades of blue) having met most of the historical increases in energy use (leftmost columns).

While the STEPS maps a future where renewables meet half of the increase in demand to 2040, and the pace of growth slows due to shifting economic factors and energy efficiency (central columns), it remains well short of putting a cap on global CO2 emissions (see discussion below).

If increases in global temperatures are to be stopped, then even more decisive changes will be required, as shown in the example of the IEA SDS (rightmost columns).

Average annual change in global energy demand, by fuel, million tonnes of oil equivalent. Left: historical changes. Centre: IEA STEPS. Right: IEA SDS. Source: IEA . Chart by Carbon Brief using .

The rising portion of demand growth met by renewables sees the fossil fuel share of global energy use decline from 81% in 2018 to 74% in 2040 under the STEPS, or 58% under the SDS.

Moving from the STEPS to the SDS will require a wide range of changes, most of which have long been on the agenda for policymakers. As the report explains:

“The global value of fossil fuel consumption subsidies in 2018 was almost double the combined value of subsidies to renewable energy and electric vehicles and the revenue from carbon pricing schemes around the world. This imbalance greatly complicates the task of achieving an early peak in emissions.”

By the 2030s, investment in fossil fuels without carbon capture would halve in the SDS, relative to the average during 2014-2018. At the same time, investment in renewables, electricity networks and nuclear would roughly double and spending on energy efficiency would nearly quadruple.

This reflects the fact that energy efficiency is the single most important factor in tackling emissions, the IEA says, meaning that overall demand in 2040 under the SDS is slightly below today’s levels.

It says “the potential for efficiency improvements to help the world meet its sustainable energy goals is massive” and it has convened a to boost progress.

In part, this is a response to data showing that efficiency improvements are drying up and 2018 saw the , with this “faltering momentum” a cause for “deep concern”. It cites “a relative lack of new energy efficiency policies and of efforts to tighten existing measures”.

The World Energy Outlook is out today and shows once again the critical role of energy efficiency for achieving carbon goals.

— Jan Rosenow (@janrosenow)

Lower demand has knock-on consequences, particularly when combined with more rapid growth from renewables. Notably, demand for coal, oil and gas progressively declines under the SDS, with coal facing particularly large reductions (grey chunks in the rightmost columns, above).

Within this total, the IEA suggests that coal use in the power sector would be hardest hit. It says that more than half of current coal-fired power stations would retire by 2040 in the SDS, representing a fleet larger than .

With half of retirements coming before the end of their useful lives, some of the $1tn of capital invested in the world’s existing coal fleet would be put at risk, if warming is kept below 2C. Some 98% of the 222 gigawatts (GW) of coal in Europe and 88% of the 276GW in the US would close.

Under the SDS, the remaining coal plants would mostly need to be “repurposed or retrofitted”, the IEA says. This means they would either operate limited hours, during peaks in demand and troughs in renewable output, or would face substantial investments to fit (CCS) technology to prevent their CO2 emissions.

This year’s outlook contains new analysis on the methane released during coal mining, which it suggests has a greater warming impact than .

※ 全文及圖片詳見:()

作者

如果有一件事是重要的,如果能為孩子實現一個願望,那就是人類與大自然和諧共存。

於特有生物研究保育中心服務,小鳥和棲地是主要的研究對象。是龜毛的讀者,認為龜毛是探索世界的美德。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

南投搬家前需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

曼谷空中動物園 環境惡劣成動物空中監獄

摘錄自2019年12月2日公視報導

泰國曼谷一間百貨商場,表面平凡無奇。低樓層賣男女服飾,但商場的頂樓,竟是一座空中動物園,裡面關了多達200隻動物,環境惡劣,是一座名符其實的「空中監獄」。裡頭有母猩猩,一關超過30年,處境孤單淒涼,被認為是全世界最悲傷的動物園之一。動保團體要求關閉動物園,還給動物們應有的生存尊嚴。

泰國曼谷的pata百貨購物中心,六樓跟七樓的頂樓,是已被判定違法的動物園。這隻被關在鐵籠子裡的母猩猩,泰國的譯名是白色小蓮花,小蓮花雖然有人餵食照顧,但生活環境惡劣,充滿惡臭。最可憐的是,牠被關在這座空中動物園已整整36年,過著完全失去自由的生活。為了解救小蓮花,動保團體本周再次出面呼籲,儘快關閉這座空中監獄。他們強調,殘忍的對待動物,決不等於提供人們娛樂的方式。善待動物組織成員奧莉維亞表示,「Pata動物園是我們在亞洲遇見過最糟糕的情況,很顯然,一座百貨公司根本不是該有動物存在的場所。」

母猩猩小蓮花,1983年起被關進這座大鐵籠,從此就沒再踏出外面的世界。她在籠子裡打滾,拔毛,流淚的畫面陸續在網路上流傳。動保人士研判,小蓮花已出現精神疾病,其他包括紅毛猩猩,跟狐猴等動物,也都出現焦躁的情緒反應,看了令人鼻酸。善待動物組織成員奧莉維亞說:「這隻猩猩從1983年起就關在這裡,還有一隻紅毛猩猩也被關這很久了,都已經出現精神疾病的症狀,意味著長期被關著心理已經受創。」

事實上,這間pata百貨公司頂樓的動物園,早已多次遭人檢舉。泰國2014年通過動保法,pata動物園2015年更被判定違反動保法,但當局依舊持續核發經營執照,法律形同虛設。至於動物園的經營者也有話要說,不僅強調當初開設動物園時都諮詢過專業意見,也把小蓮花當作自己的女兒照顧,更堅稱網路上流傳小蓮花看似悲傷的表情,其實那是猩猩原本的長相,被外界誤解。不過也坦承,目前要將裡面200多隻動物移往更大的飼養空間,在經費上確實有困難。pata動物園經營者坎尼特表示,「我們有打算將動物移走,因為我們的空間確實有限。我們也打算繼續飼養這些動物,我們有計畫將動物園移往自然的開放空間,但要這麼做的同時,我也必須承認動物園是社會企業,並非以營利投資為主,因此其他的因素(經費)是最主要的問題。」

但實際走訪過這座空中監獄的泰國動物專家強調,pata動物園的存在是泰國的恥辱,猩猩的基因有超過96%跟人類相似,也跟人類有一樣的情感,被關在籠子裡36年,對他們而言可以想像是無比的折磨與煎熬。不僅是小蓮花,其他動物被關在密不通風,底下又是空氣汙染的空間,失去自由,也磨滅了動物的天性。動保團體大聲疾呼泰國政府,拿出鐵腕手段與同理心,盡快關閉這座空中動物園,早日將動物們移往適合的環境,還給他們原本就該擁有的生存尊嚴。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

新北清潔公司,居家、辦公、裝潢細清專業服務

UN氣候變化綱要公約 締約方大會登場

摘錄自2019年12月2日公視、中央通訊社報導

聯合國氣候變化綱要公約,第25次締約方大會在西班牙舉行。而聯合國秘書長古提瑞斯也在大會前夕強調,說氣候變遷的危機已經「迫在眉睫」,呼籲各國要加強行動。同時也宣布,請來即將卸任的英國央行總裁卡尼,從明年開始出任氣候行動與氣候融資的新特使。

卡尼主張氣候風險管理必須轉型,投資淨零碳排放必須成為主流,未來將會盡全力,促使氣候變遷的影響成為財務報告、風險管理和報酬計算的重點。

這場大會原訂12月2號到13號在智利登場,但因為國內動亂,改在西班牙舉行,包括國家領袖、科學家、談判人員和環保運動人士等兩萬多人參與。這也是未來一年一連串國際密集協商的開端,要為明年11月格拉斯哥舉行的全球氣候峰會鋪路,屆時各國將依照巴黎氣候協定要求,提交對抗暖化的具體減碳方案,以便達成把全球溫度控制在比工業化升高1.5度到2度之內的目標。

目前幾乎全球各國都簽署了巴黎氣候協定,但排碳大戶美國,上個月4號已經展開了為期一年的退出程序。這次會議,美國只派層級不高的外交代表團,由負責環境科學事務的首席副助理國務卿伯尼卡特率隊。民主黨籍的眾議院議長裴洛西則率國會代表團參加,當中也沒有共和黨議員。

古提瑞斯今(2日)在氣候峰會的開幕全體會議上表示,面對威脅自身文明的氣候危機,人類必須在即時行動、追求希望,或是無動於衷、舉手投降之間作出抉擇。

世界氣象組織表示,過去5年是有紀錄以來最炎熱的5年,而且大氣裡導致地球暖化的二氧化碳(CO2)濃度已達300萬至500萬年來未見的程度。

古提瑞斯說:「現在北極圈永凍層比預測早70年融化。南極洲融化速度是10年前的三倍,海平面上升速度比預期更快。而且全球超過2/3的巨型都市都靠海。」根據近期研究,到2050年以前,全球會有超過1億5000萬人身處沿海洪患區。

去年聯合國一份重要報告則指出,若要防止氣溫升幅超過攝氏1.5度,全球經濟須在世紀中以前達成碳中和(carbon neutral)。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

海拔4000公尺的馬鈴薯博物館 暖化未來養活世界人口的希望

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

南投搬家前需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

美頂尖企業和工會領袖 表態支持巴黎氣候協定

摘錄自2019年12月3日中央通訊社報導

美國一流企業執行長和工會領導人今天(3日)公開呼籲,要求美國續留巴黎氣候協定,避免全球氣溫上升。他們表明,對抗氣候變遷,將會保護美國經濟,並創造更多就業及商業機會。

這群領導人包括蘋果(Apple)、特斯拉(Tesla)、聯合利華公司(Unilever)和荷蘭皇家殼牌集團(Royal Dutch Shell)的執行長。他們在馬德里舉辦的聯合國氣候會議發表聲明說,對抗全球暖化的巴黎氣候協定,將促進經濟健全,並得以建立有競爭力公司。

美國是造成暖化溫室氣體的全球最大排放國之一,總統川普政府計劃退出2015年巴黎氣候協定。該協定是經過將近200個國家談判達成的協議,目標是將全球升溫抑制在「遠低於」攝氏2度,理想是攝氏1.5度以內。

川普堅稱巴黎氣候協定將耗費美國數以兆計美元、喪失數以百萬計就業機會,並妨礙石油、天然氣、煤炭和製造產業。美國上個月正式啟動退出程序。

這批75位企業高層表明支持巴黎氣候協定,並稱他們總共雇用超過200萬美國員工,而工會領導人則代表1250萬名勞工。他們說:「留在巴黎氣候協定會強化我們在全球市場的競爭力,讓美國處於引領發展新科技的地位,新科技將能支援轉型過渡、供養我們的勞工和社區,並創造持久的就業和企業。」

國際勞工組織(ILO)表示,在推廣更環保經濟政策下,全球將能在2030年前創造2400萬個新工作。它並指出,永續能源產業提供的工作,將會超出其他領域砍掉的估計約600萬個工作。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

新北清潔公司,居家、辦公、裝潢細清專業服務

日本宣示維持燃煤發電 透過技術研發減少排碳

摘錄自2019年12月3日中央通訊社報導

日本政府經濟產業大臣梶山弘志今天(3日)表示,「希望將燃煤電廠留作發電選項之一」,表達日本政府除了繼續燃煤發電,也將以透過技術研發減少排碳作為目標。

日本放送協會(NHK)報導,聯合國氣候變化會議(COP25,聯合國氣候變化綱要公約第25次締約方會議)昨天在西班牙馬德里開幕,而在之前的聯合國環境規劃署(UNEP)報告書中,要求日本停止興建會排放大量溫室氣體的燃煤火力發電廠等,提出批評燃煤火力發電廠的意見。

對此,梶山上午在內閣會議後記者會上表示,日本政府希望把燃燒像煤炭這種化石燃料的火力發電廠,留作發電的選項之一,「為邁向未來的最佳能源組合,考量所有能源選項非常重要」。

梶山表示,站在日本政府立場,會盡可能減少對核電的依賴度,並增加再生能源發電比率來減少排放二氧化碳,在非常困難的條件下持續推動技術研發。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

潛力無窮的黑暗物質:生物炭一年可抵消10億噸碳

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

南投搬家前需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

JS面試題-<變量和類型>-JavaScript的數據類型

前言

  整理以前的面試題,發現問js數據類型的頻率挺高的,回憶當初自己的答案,就是簡簡單單的把幾個類型名稱羅列了出來,便沒有了任何下文。其實這一個知識點下可以牽涉發散出很多的知識點,如果一個面試者只是羅列的那些名詞出來,可能面試官都不願意繼續問下去了,這該算是js基礎的基礎了。如果這個問題沒有很好的回答,其他問題仍舊沒有突出的亮點,很可能就過不了。

  在網上看了一個體系,可作為大致的學習檢閱自己的途徑,按照清單上的知識檢測自己還有哪些不足和提升,最後形成自己的知識體系。在工作、學習甚至面試時,可以快速定位到知識點。

1. JavaScript規定了幾種語言類型 2. JavaScript對象的底層數據結構是什麼 3. Symbol類型在實際開發中的應用、可手動實現一個簡單的 Symbol 4. JavaScript中的變量在內存中的具體存儲形式 5. 基本類型對應的內置對象,以及他們之間的裝箱拆箱操作 6. 理解值類型和引用類型 7. null和 undefined的區別 8. 至少可以說出三種判斷 JavaScript數據類型的方式,以及他們的優缺點,如何準確的判斷數組類型 9. 可能發生隱式類型轉換的場景以及轉換原則,應如何避免或巧妙應用 10. 出現小數精度丟失的原因, JavaScript可以存儲的最大数字、最大安全数字, JavaScript處理大数字的方法、避免精度丟失的方法

 

一、JavaScript規定了幾種語言類型

  問:講一下js的數據類型?

  答:js的數據類型分為簡單數據類型和複雜數據類型;

簡單數據類型有六種,分別是String(字符串)、Number(数字)、Null(空)、undefined(未定義)、boolean(布爾值)、symbol(符號),表示不能再繼續分下去的類型,在內存中以固定的大小存儲在棧中,按值訪問;

複雜數據類型是指對象,這裡有常見的array、function、object等,本質上是一組無序的鍵值對組成。它的值大小不固定,所以保存在堆中,但在棧中會存儲有指向其堆內存的地址,按引用來訪問。js不允許直接訪問內存中的位置,也就是說不能直接操作對象的內存空間。也就是說,當我們想要訪問應用類型的值的時候,需要先從棧中獲得對象的地址指針,然後通過地址指針找到其在堆中的數據。

需要注意的是,

1、簡單數據類型中的boolean、number、string不是由內置函數new出來的,儘管他們有對應的引用類型;

2、symbol是ES6引入的一種新的原始數據,表示獨一無二且不可改變的值。通過 Symbol 函數調用生成,由於生成的 symbol 值為原始類型,所以 Symbol 函數不能使用 new 調用;

3、將一個變量賦值給另一個變量時,基礎類型複製的是值,賦值完成兩個變量在沒有任何關係;而對象類型的複製的是地址,修改一個變量另一個變量也會跟着一起變化。(如何解決這個問題?關於深拷貝and淺拷貝)

二、JavaScript對象的底層數據結構是什麼

這個問題目前對我來說,不能夠理解到底是想問什麼,還有問題,看到一篇這個文章,轉載《從chrome源碼看js object的實現》:

三、Symbol類型在實際開發中的應用、手動實現一個簡單的 Symbol

(暫未學習總結)

四、JavaScript中的變量在內存中的具體存儲形式

  js的數據類型分為簡單數據類型和複雜數據類型;在內存中,簡單數據類型以固定的大小存儲在棧中;複雜數據類型存儲在堆中,且大小不固定,同時在棧中會存儲其指向堆地址的指針。

因為這裏問的是內存中的存儲形式,所以我一直注意的是內存中堆棧,後來忽然看到一篇文章寫了數據結構中的堆和棧就有一點懵,先簡單記錄一下相關知識點。

內存的堆棧:

  是一種物理結構,用於存放不同數據的內存空間,分為棧區和堆區。

1)棧內存:

  棧(stack)是向低地址擴展的數據結構,是一塊連續的內存區域;一般來說其大小是系統預先規定好的,存儲大小已知的變量(函數的參數值、局部變量的值等)。由操作系統自動申請分配並釋放(回收)空間,無需程序員控制,這樣的好處是內存可以及時得到回收。但棧的大小有限,如果申請的空間超過棧的剩餘空間,就會提示棧溢出(一般無窮次的遞歸調用或大量的內存分配會引起棧溢出)。

在分配內存的時候類似於數據結構中的棧,先進后出的原則,即從棧低向棧頂,依次存儲。棧是向下增長,即從高地址到低地址分配內存,且內存區域連續、每個單元的大小相同。如下圖:

 2)堆內存:

  在現代程序中,在編譯時刻不能決定大小的對象將被分配在堆區。一般由程序員分配釋放,例如;c++和Java語言都為程序員提供了new(或malloc()),該語句創建的對象(或指向對象的指針),然後使用delete(或free())語句釋放。如果程序員不主動釋放,程序結束時由OS回收。 在內存分配的時候方式類似於鏈表,堆是向上增長,即從低地址到高地址擴展,是不連續的內存區域。如下圖:

數據結構的堆棧:

  是一種抽象的數據存儲結構,

棧:一種連續存儲的數據結構,特點是存儲的數據先進后出,只能在棧頂一端對數據項進行插入和刪除。

堆:是一棵完全二叉樹結構(知識點未掌握)

 五、基本類型對應的內置對象,以及他們之間的裝箱拆箱操作

1)基本包裝類型

 

  問:有了基本類型為什麼還要包裝類型?

  答:為了便於操作基本類型值,ECMAScript提供了3個特殊的引用類型:Boolean、Number和String, 每當讀取一個基本類型值的時候,後台會創建一個對應的基本包裝類型的對象,從而能夠調用一些方法來操作這些基本類型。每個包裝類型都映射到同名的基本類型。

2)裝箱和拆箱

    裝箱就是把基本類型轉換為對應的內置對象,這裏可分為隱式和顯式裝箱。     拆箱就是與裝箱相反,把對象轉變為基本類型的值。        Ⅰ 隱式裝箱 在讀取模式下,訪問基本類型值(即讀取基本類型的值),就會創建基本類型所對應的基本包裝類型的一個對象,從而讓我們能夠調用一些方法來操作這些數據。這個基本包裝類型是臨時的,操作基本類型值的語句一經執行完畢,就會立即銷毀新創建的包裝對象。

var s1 = “stringtext”; var s2 = s1.substring(2);

如上面的例子,第一行變量s1是一個基本類型的字符串,第二行調用了s1的substring()方法,並將結果保存在了s2中。 基本類型值不是對象,從邏輯上講它們不應該有方法。其實這裏就包含了隱式裝箱,後台自動完成了一系列的處理。當第二行代碼訪問s1時,訪問過程處於一種讀取模式,即從內存中讀取這個字符串的值。 在讀取字符串時,後台會完成一下處理。

(1)創建String類型的一個實例      =>  var s1 = new String(“stringtext”); (2)在實例上調用指定的方法        =>  var s2 = s1.substring(2); (3)摧毀這個實例                 =>  s1 = null;

注:①上面s1 = null;這種做法叫做解除引用,一旦有數據不再有用,通過設置其值為null來是釋放其引用;一般適用於大多數全局變量和全局對象的屬性。   ②
引用類型和基本包裝類型的主要區別:就是對象的生存期。使用new操作符創建的引用類型的實例,在執行流離開當前作用域之前都一直保存在內存中。而自動創建的基本包裝類型的對象,則只存在於一行代碼的執行瞬間,然後立即被銷毀,因此我們不能在運行時為基本類型值添加屬性和方法。

var s1 = “stringtext”; s1.color = “red”; //在這一句話執行完的瞬間,第二行創建的String就已經被銷毀了。 console.log(s1.color);//執行這一行代碼時又創建了自己的String對象,而該對象沒有color屬性。 //undefine

   Ⅱ 顯式裝箱 通過New調用Boolean、Number、String來創建基本包裝類型的對象。不過,不建議顯式地創建基本包裝類型的對象,儘管它們操作基本類型值的能力相當重要,每個基本包裝類型都提供了操作相應值的便捷方法。 Object構造函數會像工廠方法一樣,根據傳入值的類型返回相應基本包裝類型的實例。

var obj = new Object(“stringtext”); console.log(obj instanceof String); //true

    Ⅲ 拆箱 把對象轉變為基本類型的值,在拆箱的過程調用了JavaScript引擎內部的抽象操作,ToPrimitive(轉換為原始值),對原始值不發生轉換處理,只針對引用類型。 JavaScript引擎內部的抽象操作ToPrimitive()是這樣定義的,
 ToPrimitive(input [, PreferredType])
該操作接受兩個參數,第一個參數是要轉變的值,第二個是PreferredType為可選參數,只接受Number或String,作用是設置想要轉換原值時的轉換偏好。最後使input轉換成原始值。
如果PreferredType被標誌為Number,則會進行下面的操作來轉換input。 ①如果輸入的是一個原始值,則直接返回它; ②否則,如果輸入的值是一個對象,則調用該對象的valueOf()方法,如果valueOf()方法的返回值是一個原始值,則返回這個原始值; ③否則,調用這個對象的toString()方法,如果toString方法的返回值是一個原始值,則返回這個原始值; ④否則,拋出TypeError異常; 如果PreferredType被標誌為String,則轉換操作的第二步和第三步的順序會調換。即 ①如果輸入的是一個原始值,則直接返回它; ②否則,如果輸入的值是一個對象,則調用該對象的 toString()方法,如果toString()方法的返回值是一個原始值,則返回這個原始值; ③否則,調用這個對象的valueOf()方法,如果valueOf()方法的返回值是一個原始值,則返回這個原始值; ④否則,拋出TypeError異常; 如果沒有PreferredType的值會按照這樣的規則來自動設置: Date類型的對象會被設置為String,其他類型的值被設置為Number  

inputTpye result
Null 不轉換,直接返回
Undefined 不轉換,直接返回
Number 不轉換,直接返回
Boolean 不轉換,直接返回
String 不轉換,直接返回
Symbol 不轉換,直接返回
Object 按照下列步驟進行轉換

  參考文章: 《js隱式裝箱》                   《[譯]JavaScript在中,{} + {}等於多少?》                      原文《javaScript在中,what is {} + {} in javascrupt    ?》 

六、理解值類型和引用類型

js包含兩種數據類型,基本數據類型和複雜數據類型,而其對應的值基本類型的值指的是簡單的數據段,引用類型指的是那些可能有多個值構成的對象。可以從三個方面來理解:動態的屬性、複製變量的值、傳遞參數

1)、動態的屬性

定義基本類型值和引用類型值的方式類似,即創建一個變量併為該變量賦值。兩者的區別在於,對於引用類型的值,我們可以為其添加屬性和方法,也可以改變和刪除其屬性和方法;對於基本類型的值,我們不能為其動態地添加屬性。

var person = new Object(); //創建一個對象並將其保存在變量person中 person.name = “Song”; //為該對象添加一個名為name的屬性,並賦值為Song console.log(person.name); //訪問name這個屬性 //Song

2)、複製變量的值

在從一個變量向另一個變量複製基本類型值和引用類型值時,兩則也是不同的,這主要是由於基本類型和引用類型在內存中存儲不同導致的。

  Ⅰ基本類型的值 基本類型的值是存在棧中,存儲的即是基本類型的值;如果從一個變量向另一個變量複製的時候,就會重新創建一個變量的新值然後將其複製到為新變量分配的位置上,此時兩個變量各自擁有屬於自己的獨立的內存空間,因此兩者可以參与任何操作而不會相互影響。

var a = 1; var b = a; b = 2; console.log(a);//1 console.log(b);//2

 內存變化大致如下:

  Ⅱ複製引用類型的值

引用類型的值存儲在堆中,同時在棧中會有相應的堆地址(指針),指向其在堆的位置。此時如果我們要複製一個引用類型時,複製的不是堆內存中的值,而是將棧內存中的地址複製過去,複製操作結束后,兩個對象實際上都指向堆中的同一個地方。因此改變其中一個對象(堆中的值改變),那麼會影響到另一個對象。

 

var obj1 = {     name:”Song” }; var obj2 = obj1; obj2.name = “D”; //改變obj2的name屬性的值,則將obj1的也改變了。 console.log(obj1.name); // D 

 

注:關於深拷貝和淺拷貝

3)、傳遞參數

 ECMAScript中所有函數的參數都是按值傳遞的,無論在向參數傳遞的是基本類型還是引用類型。(我的理解:正因為是按值傳遞的,所以我們才可以利用此來完成深拷貝)

有一道關於證明引用類型是按值傳遞還是按引用傳遞的題目如下:

function test(person){
person.age = 26;
person = {
  name:'yyy',
  age:30
}
return person
}
const p1 = {
  name:'yck',
  age:25
};
const p2 = test(p1);
console.log(p1);
console.log(p2);

首先當我們從一個變量向另一個變量複製引用類型的值時,這個值是存儲在棧中的指針地址,複製操作結束后,兩個變量引用的是同一個對象,改變其中一個變量,就會影響另一個變量。

而在向參數傳遞引用類型的值時,同樣是把內存中的地址複製給一個局部變量,所以在上述代碼中,將p1的內存地址指針複製給了局部變量person,兩者引用的是同一個對象,這個時候在函數中改變變量,就會影響到外部。

接下來相當於從新開闢了一個內存空間,然後將此內存空間的地址賦給person,可以理解為將剛才指向p1的指針地址給覆蓋了,所以改變了person的指向,當該函數結束后便釋放此內存。

(此圖作為自己的理解,不代表實際,很有可能實際並不是這樣操作的。)

所以在person.age = 26;這句話執行后把p1內存里的值改變了,打印出來p1是{name: “yck”, age: 26}  p2是{name: “yyy”, age: 30}

而我理解的如果按引用傳遞,則相當於person的指向是和p1也一樣,所以後續只要是對person進行了操作,都會直接影響p1。

因此在這種情況下,打印出來p1和p2都是{name: “yyy”, age: 30}

七、null和 undefined的區別

1)、null類型    

        《高程》上解釋:null值表示一個空對象指針,所以這也是使用typeof操作符檢測null值時會返回”object”的原因。

var car = null; console.log(typeof car); //object

             一般來說,我們要保存對象的變量在還沒有真正保存對象之前可以賦值初始化為null,其他的基礎類型在未賦值前默認為undefined,這樣一來我們直接檢查變量是否為null可以知道相應的變量是否已經保存了一個對象的引用。 即如果定義的變量準備在將來保存為對象,那麼我們將該變量初始化為null,而不是undefined。 2)、undefined類型         在使用var申明變量但未對其初始化時,這個變量的值就是undefined。

var s; console.log(s == undefined); //true

3)、null和undefined的區別     一般來說undefined是派生自null的值,因此null == undefined  是為true,因為它們是類似的值;如果用全等於(===),null ===undefined會返回false ,因為它們是不同類型的值。以此我們可以區分null和undefined。

八、至少可以說出三種判斷 JavaScript數據類型的方式,以及他們的優缺點,如何準確的判斷數組類型

  問:判斷js數據類型有哪幾種方式,分別有什麼優缺點?怎麼樣判斷一個值是數組類型還是對象?(或者typeof能不能正確判斷類型)

  答:一般來說有5種常用的方法,分別是typeof、instanceof、Object.prototype.toString()、constructor、jquery的type();

1)對於typeof來說,在檢測基本數據類型時十分得力,對於基本類型,除了null都可以返回正確類型,對於對象來說,除了function都返回object。

基本類型

  typeof “somestring”   // ‘string’
  typeof true        // ‘boolean’
  typeof 10          // ‘number’
  typeof Symbol()    // ‘symbol’
  typeof null        // ‘object’ 無法判定是否為 null
  typeof undefined   // ‘undefined’

複雜類型

  typeof {}           // ‘object’
  typeof []           // ‘object’  如果需要判斷數組類型,則不能使用這樣方式
  typeof(() => {})    // ‘function’

 

注:怎麼使用複合條件來檢測null值的類型?

var a = null;

(!a && typeof a === “object”);     // true

 

2)對於instanceof來說,可以來判斷已知對象的類型,如果使用instanceof來判斷基本類型,則始終返回false。

其原理是測試構造函數的prototype是否出現在被檢測對象的原型鏈上;所有的複雜類型的值都是object的實例,在檢測一個引用類型值和Object構造函數時,instanceof操作符始終返回true。

[] instanceof Array         //true  -》 無法優雅的判斷一個值到底屬於數組還是普通對象 ({}) instanceof Object         //true (()=>{}) instanceof Function         //true

而且在《高程》上還看到說一個問題,如果不是單一的全局執行環境,比如網頁中包含多個框架,那麼實際上存在兩個以上不同的全局執行環境,從而存在兩個以上不同版本的Array構造函數,如果從一個框架向另外一個框架傳入數組,那麼傳入的數據與在第二個框架中原生創建的數組分別具有各自不同的構造函數。eg:例如index頁面傳入一個arr變量給iframe去處理,則即使arr instanceof Array還是返回false,因為兩個引用的Array類型不是同一個。並且constructor可以重寫所以不能確保萬無一失。

對於數組來說,相當於new Array()出的一個實例,所以arr.proto === Array.prototype;又因為Array是Object的子對象,所以Array.prototype.proto === Object.prototype。因此Object構造函數在arr的原型鏈上,便無法判斷一個值到底屬於數組還是普通對象。

注:判斷變量是否為數組的方法

3)通用但比較繁瑣的方法Object.prototype.toString() 

該方法本質是利用Object.prototype.toString()方法得到對象內部屬性[[Class]],傳入基本類型也能夠判斷出結果是因為對其值做了包裝。

Object.prototype.toString.call({})  ===  ‘[object Object]’      ——-> true;
Object.prototype.toString.call([])   ===  ‘[object Array]’  ——-> true;
Object.prototype.toString.call(() => {})  ===  ‘[object Function]’  ——-> true;
Object.prototype.toString.call(‘somestring’)  ===  ‘[object String]’  ——-> true;
Object.prototype.toString.call(1)  ===  ‘[object Number]’  ——-> true;
Object.prototype.toString.call(true)  ===  ‘[object Boolean]’  ——-> true;
Object.prototype.toString.call(Symbol()) ===  ‘[object Symbol]’  ——-> true;
Object.prototype.toString.call(null)   ===  ‘[object Null]’  ——-> true;
Object.prototype.toString.call(undefined)  === ‘[object Undefined]’  ——-> true;

Object.prototype.toString.call(new Date())   ===  ‘[object Date]’  ——-> true;
Object.prototype.toString.call(Math)  === ‘[object Math]’  ——-> true;
Object.prototype.toString.call(new Set())  ===  ‘[object Set]’  ——-> true;
Object.prototype.toString.call(new WeakSet())  ===  ‘[object WeakSet]’  ——-> true;
Object.prototype.toString.call(new Map())  ===  ‘[object Map]’  ——-> true;
Object.prototype.toString.call(new WeakMap())  ===  ‘[object WeakMap]’  ——-> true;

4)根據對象的constructor判斷

 

[].constructor === Array     ——–> true var d = new Date(); d.constructor === Date     ———> true (()=>{}).constructor === Function   ——-> true 注意: constructor 在類繼承時會出錯 eg: function A(){}; function B(){}; A.prototype = new B(); //A繼承自B var aobj = new A(); aobj.constructor === B  ——–> true; aobj.constructor === A   ——–> false; 而instanceof方法不會出現該問題,對象直接繼承和間接繼承的都會報true:

5)jquery的type()

如果對象是undefined或null,則返回相應的“undefined”或“null”, jQuery.type( undefined ) === “undefined” jQuery.type() === “undefined” jQuery.type( null ) === “null” 如果對象有一個內部的[[Class]]和一個瀏覽器的內置對象的 [[Class]] 相同,我們返回相應的 [[Class]] 名字。  jQuery.type( true ) === “boolean” jQuery.type( 3 ) === “number” jQuery.type( “test” ) === “string” jQuery.type( function(){} ) === “function” jQuery.type( [] ) === “array” jQuery.type( new Date() ) === “date” jQuery.type( new Error() ) === “error” // as of jQuery 1.9 jQuery.type( /test/ ) === “regexp”

6)如何判斷一個數組?

var  a = [];

a.instanceof  Array;  ——–> true

a.constructor === Array  ——–> true

Object.prototype.toString.call(a)   ===  ‘[object Array]’  ——–> true

Array.isArray([]);      ——–> true

九、可能發生隱式類型轉換的場景以及轉換原則,應如何避免或巧妙應用

(暫未整理)

十、出現小數精度丟失的原因、 JavaScript可以存儲的最大数字以及最大安全数字、JavaScript處理大数字的方法、避免精度丟失的方法

  問:0.1+0.2 === 0.3 為什麼是false?

  答:在ECMAScript數據類型中的Number類型是使用IEEE754格式來表示的整數和浮點數值,所謂浮點數值就是該數值必須包含一個小數點,並且小數點後面必須至少有一位数字。而在使用基於IEEE754數值的浮點運算時出現參數舍入的誤差問題,即出現小數精度丟失,無法測試特定的浮點數值。

  ①在進行0.1+0.2的時候首先要將其轉換成二進制。

  0.1 => 0.0001 1001 1001 1001…(無限循環)   0.2 => 0.0011 0011 0011 0011…(無限循環)   ②由於 JavaScript 採用 IEEE 754 標準,數值存儲為64位雙精度格式,數值精度最多可以達到 53 個二進制位(1 個隱藏位與 52 個有效位)。如果數值的精度超過這個限度,第54位及後面的位就會被丟棄,所以在相加的時候會因為小數位的限制而將二進制数字截斷。   0.0001 1001 1001 1001…+0.0011 0011 0011 0011… = 0.0100110011001100110011001100110011001100110011001100   ③再轉換成十進制就成了0.30000000000000004,而非我們期望的0.3

在《js權威指南》中有指出:

Javascript採用了IEEE-745浮點數表示法(幾乎所有的編程語言都採用),這是一種二進製表示法,可以精確地表示分數,比如1/2,1/8,1/1024。遺憾的是,我們常用的分數(特別是在金融的計算方面)都是十進制分數1/10,1/100等。二進制浮點數表示法並不能精確的表示類似0.1這樣 的簡單的数字,上訴代碼的中的x和y的值非常接近最終的正確值,這種計算結果可以勝任大多數的計算任務:這個問題也只有在比較兩個值是否相等時才會出現。 這個問題並不是只在javascript中才會出現,在任何使用二進制浮點數的編程語言中都會出現這個問題。 所以說,精度丟失並不是語言的問題,而是浮點數存儲本身固有的缺陷。只不過在 C++/C#/Java 這些語言中已經封裝好了方法來避免精度的問題,而 JavaScript 是一門弱類型的語言,從設計思想上就沒有對浮點數有個嚴格的數據類型,所以精度誤差的問題就顯得格外突出。   javascript的未來版本或許會支持十進制数字類型以避免這些舍入問題,在這之前,你更願意使用大整數進行重要的金融計算,例如,要使用整數‘分’而不是使用小數‘元’進行貨比單位的運算。

   問:怎麼避免精度丟失?

   答:一般常用的有四個方法,第一個是設置一個“能夠接受的誤差範圍”,在這個範圍內,可認為沒有誤差;第二個是使用三方的類庫math.js;第三是使用toFixed()方法;第四是封裝一個計算類(加、減、乘、除)。   ①ES6在Number對象上面,新增了一個極小的常量Number.EPSILON,它表示1與大於1的最小浮點數之間的差,它是實際上是javascript能夠表示的最小精度(可以接受的最小誤差範圍),誤差如果小於這個值,就可以認為已經沒有意義了,即不存在誤差。

Number.EPSILON === Math.pow(2, -52) // true      說明這個值Number.EPSILON是等於 2 的 -52 次方

  寫一個誤差檢測函數,來判斷0.1 + 0.2 === 0.3   設置誤差範圍為 2 的-50 次方(即
Number.EPSILON * Math.pow(2, 2)),即如果兩個浮點數的差小於這個值,我們就認為這兩個浮點數相等。

  function withinErrorMargin (left, right) {  
         return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2);
  }
    withinErrorMargin(0.1 + 0.2, 0.3)    //true

  ②math.js是一個廣泛應用於JavaScript 和 Node.js的數學庫,它的特點是靈活表達式解析器,支持符號計算,內置大量函數與常量,並提供集成解決方案來處理不同的數據類型,如数字,大数字,複數,分數,單位和矩陣。

  ③toFixed()方法   定義:toFixed() 方法可把 Number 四舍五入為指定小數位數的数字。   用法:NumberObject.toFixed(num) 其中num是必須的,規定小數的位數,是 0 ~ 20 之間的值,包括 0 和 20,有些實現可以支持更大的數值範圍。如果省略了該參數,將用 0 代替。 然而實際上,並不是完美的,可能你開發時候測試的幾個實例恰巧都是你想要的結果,可能在實際上線后遇到大量的數據后發現出問題了,不能正確的計算。一般是在遇到最後一位是5的時候,就不是’四舍五入”,eg:2.55.toFixed(1)   //  2.5,而我們齊期望的是2.56。 我有查這個產生誤差的原因,有人說是“銀行家的舍入規則”,即四舍六入五考慮,這裏“四”是指≤4 時捨去,”六”是指≥6時進上。”五”指的是根據5後面的数字來定,當5後有數時,舍5入1;當5后無有效数字時,需要分兩種情況來講:5前為奇數,舍5入1;5前為偶數,舍5不進(0是偶數)。但在某些情況下也是不成立。

2.65.toFixed(1)  //2.6    結果正確     2.45.toFixed(1)  //2.5    希望得到的結果是2.4 2.35.toFixed(1)   //2.4    結果正確

由於無法解決這種問題,所以看到有一些是以項目需求為準重寫符合要求的函數,在Math.round(x)來擴展解決toFixed()四舍五入不精確的問題。  原本round(x) 方法可把一個数字四舍五入為最接近的整數,其中x是必須的且必須是数字。雖然解決了四舍五入的問題,但卻沒有直接解決保留小數點后多少位的問題,因而需要重寫符合需求的函數。

function RoundNum(n, m){ //n表示需要四舍五入的數,m表示需要保留的小數位數
var newNum = Math.round(n * Math.pow(10, m)) / Math.pow(10, m) ;
//首先將要保留的小數位數的小數部分轉成整數部分,利用冪函數將n乘以10的m次方
//然後利用Math.round()方法進行四舍五入處理
//最後再除以10的m次方還原小數部分
//注:此時還未能將所有数字正確轉換。例如將1.0001保留3位小數我們想要的結果是1.000,而此時newNum裏面的值是1
//所以還需要處理此種特殊情況,即保留的小數位上全0
var newSNum = newNum.toString();
//這一步將剛才進行處理過的數轉換成字符串
var rs = newSNum.indexOf('.'); //利用indexOf查找字符串中是否有.,它返回某個指定的字符串值在字符串中首次出現的位置,不存在則返回-1
if (rs < 0) {
rs = newSNum.length;
newSNum += '.';
}
while (newSNum.length <= rs + m) { //在末尾加0
newSNum += '0';
}
return newSNum;
}

console.log(RoundNum(1.0005, 3)); //得到1.001

  ④封裝一個計算類(加、減、乘、除)

(暫未實際寫過)

  問:JavaScript可以存儲的最大数字以及最大安全数字

  答:最大数字是Number.MAX_VALUE、最大安全数字是Number.MAX_SAFE_INTEGER。Number.MAX_VALUE大於Number.MAX_SAFE_INTEGER,我的理解是js可以精確表示最大安全数字以內的數,超過了最大安全数字但沒超過最大数字可以表示,但不精確,如果超過了最大数字,則這個數值會自動轉換成特殊的Infinity值。

由於內存的限制,ECMAScript並不能保存世界上所有的數值,ECMAScript能夠表示的最小數值是Number.MIN_VALUE,能夠表示的最大數值是Number.MAX_VALUE。超過數值是正值,則被轉成Infinity(正無窮),如果是負值則被轉成-Infinity(負無窮)。如果在某次返回了正或負的Infinity值,那麼該值將無法繼續參与下一次的計算,所以我們需要確定一個數值是不是有窮的,即是不是位於最小和最大的數值之間,可以使用isFinite()函數,如果該函數參數在最小和最大數值之間時會返回true。注意,如果參數類型不是數值,Number.isFinite一律返回false

JavaScript 能夠準確表示的整數範圍在-2^532^53之間(不含兩個端點),超過這個範圍,無法精確表示這個值。ES6 引入了Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER這兩個常量,用來表示這個範圍的上下限。Number.isSafeInteger()則是用來判斷一個整數是否落在這個範圍之內。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

新北清潔公司,居家、辦公、裝潢細清專業服務