常看到美國的官員說中國違背國際秩序,現在日本也加入進來了,那我們不禁有個疑惑,究竟這個“中國違背國際秩序”是什么意思?
4月17日,訪問美國的日本首相菅義偉,和美國總統拜登發布了一個美日領導人聯合聲明,其中涉及中國的內容遭到了中國外交部的反對。
那么他們的聲明究竟包含了關于中國的什么消極內容呢?
在美國之音上有中文版的原文,他們表示了對東海,南海,臺灣,香港,新疆的關切,并稱“中國的活動與基于國際規則的秩序不符”。
如下所示:
“拜登總統和菅義偉首相就中國的行動對印度太平洋地區乃至世界和平與繁榮的影響交換了意見,并對中國的活動與基于國際規則的秩序不符,包括用經濟或其他形式的脅迫。
我們將繼續基于普世價值和共同原則合作。我們也認識到威懾對于維持該地區的和平與穩定的重要性。
我們反對任何單方面改變東中國海現狀的企圖。
我們重申對中國在南中國海的非法海事主張和活動的反對,并重申我們對遵循國際法的自由開放的南中國海有強烈的共同利益。在南中國海,航行自由和飛越自由與《聯合國公約》相符。
我們強調臺灣海峽兩岸和平與穩定的重要性,并鼓勵和平解決兩岸問題。
我們對香港和新疆維吾爾自治區的人權狀況表示嚴重關切。
美國和日本認識到與中國進行坦率對話的重要性,重申與他們直接就關切問題交換看法的意向,并承認有必要在有共同利益的領域與中國合作。”
無獨有偶,在上個月,美國國務卿布林肯AntonyBlinken 與國防部長奧斯汀LlyodAustin 上任后首次外訪選擇亞洲,以日本作為起點。布林肯與奧斯汀3月16日與日本高層召開“美日安全保障協議委員會”會議。會談結束以后,美日高層也發表了聯合文件,說“美國和日本認識到中國的行為,當與現存的國際秩序不一致時( inconsistent with the existing internationalorder),對同盟和國際社會造成政治、經濟、軍事和科技上的挑戰。”
這個就比較有意思,上個月在日本,這個月在美國,
美國和日本這兩個國家都發表了聯合聲明,說中國違背國際秩序(inconsistent with the existing international order,),那這句話是什么意思呢,究竟什么是違背國際秩序呢?在美國駐華大使館和領事館的官網上,是可以看到3月份的聯合聲明文件的中英文原文的,
https://china.usembassy-china.org.cn/zh/u-s-japan-joint-press-statement-cn/
在這份聯合文件里面,也和這次的美日領導人聯合聲明一樣,把具體的內容寫出來了,涉及到中國的部分,中文內容是這樣的:
“美國和日本認識到中國的行為,當與現存的國際秩序不一致時,對同盟和國際社會造成政治、經濟、軍事和科技上的挑戰。部長們承諾抵制在此地區以脅迫和破壞穩定的方式對付他國的行為,其破壞基于規則的國際體系。他們重新確認支持合法商務暢通無阻和尊重國際法, 包括航行和飛越自由和其他合法的海洋使用。
部長們同時對近來在該地區的擾亂性發展,例如中國的《海警法》,表示嚴正關切。
此外,他們也論及美國依照安保條約第五條對日本防務不動搖的承諾,包括尖閣列島在內。美日持續反對任何以單邊尋求改變現狀或削弱日本對這些島嶼的管理的行動。
部長們強調臺灣海峽和平穩定的重要性。他們重申反對中國在南中國海的非法海事聲索和活動,并重申2016年7月根據1982年《海洋法公約》所做出的、有關菲律賓和中國仲裁案的判決為最終判決,且對當事方具法律約束力。
部長們表達對香港和新疆維吾爾自治區人權狀況的嚴正關切。”
來我們總結一下這兩份聲明,美國和日本認為的中國“破壞國際規則,違背國際秩序”的點究竟是什么。
1:中國通過了《海警法》,是擾亂了地區發展
2:包括“尖閣列島”在內。美日持續反對任何以單邊尋求改變現狀或削弱日本對這些島嶼的管理的行動
3:強調臺灣海峽和平穩定的重要性(暗示是中國在破壞臺海和平穩定)
4:反對中國在南中國海的海事聲索和活動,并重申2016年7月根據1982年《海洋法公約》所做出的、有關菲律賓和中國仲裁案的判決為最終判決,且對當事方具法律約束力。
在4月的聲明里面,“重申對中國在南中國海的非法海事主張和活動的反對”
5:表達對香港和新疆人權狀況的嚴正關切
其實我們可以看出來,這五條里面,
臺灣,香港和新疆是完全的中國國內事務,而《海警法》,釣魚島和南海是涉及到中國和周邊國家的領土爭端,
而美日的聯合聲明則是完全的站在中國的對立面,在釣魚島歸屬中支持日本,在南海島嶼歸屬中支持菲律賓。美國和日本的意思是,中國的國力增強,在這些事務中占據了越來越有利的位置,所以是“違背了現存的國際秩序”。
在以前,我們總是會隱隱覺得,西方社會和日本對我們的指責,雖然總體沒有道理,但是不是多多少少還是確實我們也有不對的地方?
但是當看了這些內容之后,可以進一步確認我們在做的事情是合理的,并沒有什么不對。
美日的反對純粹是因為利益問題,而不是因為道義。
至于涉及到利益,那就是立場問題了,對與不對,就看你站在誰的立場了。
其實類似的,國內網絡上以前還有說“中國違背了入世承諾”的聲音,
2015年9月,美國智庫美國信息技術與創新基金會(InformationTechnology and Innovation Foundation,以下簡稱ITIF)的主席阿特金森與其合作者發表了一篇報告,指責中國沒有履行入世承諾。這片報告當時影響很大,說中國沒有開放電信市場,電影市場,銀行等市場之類,這個基金會還制作了一個表格,被人翻譯成了中文,在中國網上廣為傳播,畢竟是2015年,那個時候國內的氣氛對美國人還是高度信任的,覺得美國人指責一定是有理有據的,沒有意識到背后還有利益的成分,
事實上直到2018年中興事件爆發的時候,國內也還在一邊倒的罵中興不講誠信不遵守規則,到后面美國人各種加征關稅,接二連三的打擊華為,各種把中國企業實體清單,越來越多的人意識到了不對勁,國內的輿論氣氛才被美國人給扭轉了過來。
2015年ITIF基金會的報告出來后,當時國內不少學者,媒體人,知名人士也不加甄別,總之思想上毫無防備的接受了美方的觀點和內容,并且在各種場合到處傳播說中國違背了入世承諾,造成了很大的影響,畢竟三人成虎,大家都這么說,就形成了強大的輿論氛圍。
我們看下,就是下面這個表格。
其實中國政府早在2011年就發了個白皮書,叫《中國的對外貿易》
http://www.gov.cn/zwgk/2011-12/07/content_2013475.htm
里面是這么說的:
“截至2010年,中國加入世界貿易組織的所有承諾全部履行完畢。中國認真履行承諾的實際行動得到世界貿易組織大多數成員的肯定。2006年、2008年和2010年,中國政府接受了世界貿易組織的三次貿易政策審議。世界貿易組織所倡導的非歧視、透明度、公平競爭等基本原則已經融入中國的法律法規和有關制度。市場意識、開放意識、公平競爭意識、法治精神和知識產權觀念等在中國更加深入人心,推動了中國經濟進一步開放和市場經濟體制進一步完善。”
你看中國和世貿組織的說法,中國是履行了入世承諾的,顯然這和美國的說法不一致,既然雙方說法不一致,為什么我們當時會本能的選擇相信美方呢?
即使不站在中國的立場,至少也應該都看下雙方的具體觀點和證據,站在中立的角度,先不忙下結論。可惜當時我們國內的輿論氣氛,很多人就是完全采信美方的說法,只能說我們常犯的錯誤,因為美國確實很富強,結果就本能的把“把美國人想的太好了”,對其信任度太高,其實這是不利于我們客觀的看待問題的。
其實我們要有一個常識,在國際政治中的互相指責,尤其是美國為首的西方國家對我國的指責,其中一定是夾雜著利益的訴求,我們是要進行甄別的,是要進行分類的。
就以上面那個表格為例子,
我們對比下中國商務部官網發布的中國入世承諾,在如下鏈接:
http://www.mofcom.gov.cn/aarticle/Nocategory/200612/20061204000376.html
另外就是中國加入世貿組織議定書(標準中文版全文),在如下鏈接:
http://gpj.mofcom.gov.cn/article/zuixindt/201612/20161202103711.shtml
先說第一類,完全無中生有的,造謠類的,
表格里面那個中國向“華盛頓共識”定義的目標發展的承諾,這個明顯就不對,想想中國可能會做這個承諾嗎?
所謂華盛頓共識,是因為1989年,陷于債務危機的拉美國家急需進行國內經濟改革。美國國際經濟研究所邀請國際貨幣基金組織(IMF)、世界銀行(WBG)、美洲開發銀行和美國財政部的研究人員以及拉美國家代表在華盛頓召開了一個研討會,旨在為拉美國家經濟改革提供方案和對策。
曾任世界銀行美國國際經濟研究所經濟學家約翰·威廉姆森執筆寫了《華盛頓共識》,
系統地提出指導拉美經濟改革的各項主張,包括實行緊縮政策防止通貨膨脹、削減公共福利開支、金融和貿易自由化、統一匯率、取消對外資自由流動的各種障礙以及國有企業私有化、取消政府對企業的管制等。
美國人給拉美開的藥方,中國會承諾照做?僅僅從常識判斷就知道不可能,這個就不展開了,上面的鏈接有中國入世承諾原文,里面根本沒有提到華盛頓共識,這是個謠言,中國不可能做這個承諾。
美方把其希望中國入世后“經濟自由化”的意圖簡化成“華盛頓共識”,并且聲稱中國做了承諾,這是輿論戰的一部分。
同樣的謠言還有“國外電影國內發行自由化”,想想中國有可能做這樣的承諾嗎?
中國會讓國外電影在中國隨便發行?如果是那些帶有高度意識形態的電影呢?
在入世承諾的5.15 視聽服務的承諾中寫的很明確:
“電影:自加入時起,允許以利潤分成的形式每年進口20部外國電影用于影院放映。 ”
“音像制品:在不損害中國審查音像制品內容的權利的情況下,允許外商在中國設立合作企業,從事音像制品的分銷(不包括電影)”
每年進口20部分賬片,這個沒有做到么?下圖來自東方證券,實際上我國每年進口分賬電影大大超過20部的承諾。
基金會的表格里面先寫個電影自由發行,然后再寫個沒有做到承諾,這個就是傳播虛假信息。
美方真正的意思是,目前能夠進入中國的電影都是要中方審批的,而且有的片段還要按照中方的意志進行修改,比如碟中諜3在進入中國院線播放時,中方要求刪掉了一些鏡頭,例如湯姆克魯斯闖入一戶中國家庭,里面的中國人呆若木雞的樣子,就被中方要求刪掉了,
電影引進需要審查,這不符合他們的期望,指責中國違背了入世承諾,而中國認為按照承諾滿足20部的數量就可以。
同樣的謠言還有“國企市場份額逐漸減少”,這個并不在中國的入世承諾中,國企是中國政府手中的根基,我國經濟制度是以公有制為主體的形式,怎么會承諾要減少呢?
這么多行業,究竟是承諾了哪個行業的國企市場份額要逐漸減少?
如果是本來國企份額就低的行業,為什么要承諾減少?
如果是國企份額比較高的行業,究竟在多少份額以上就要承諾減少?
如果某些國企本身的競爭力就是強,也要強行將其份額減少嗎?
從這些問題可以看出,如果有減少國企市場份額的承諾,一定會是有非常具體的細則,規定了具體的行業,具體是哪個份額線之類,實際上這些內容根本就不存在于入世承諾中。
我們再看第二類,中國其實做的還算可以,但是說中國沒有做到的。
典型的就是“盜版及侵犯知識產權行為顯著減少”,
中國的入世承諾里面有很大的篇幅講知識產權保護,包括立法,商標,專利,執法等等,但是并沒有承諾“顯著減少”,當然美方如果理解成在入世條款中要求中國采取這些措施,其實就是要“顯著減少”侵犯知識產權的行為,我覺得也可以,畢竟最終還是要看結果。
但其實即使我們完全不懂專業條文,也不了解經貿活動,
就憑我們的實際生活體驗,也可以看出來,那個“盜版及侵犯知識產權行為顯著減少”是的確的事情,為啥要寫個沒有履約呢?
還記得十年前的中國互聯網環境嗎?盜版的電影,音樂,境外綜藝節目到處都可以下載,隨便一個網站都可以聽音樂看電影,上映的電影很快就會在網上出現槍版。
現在的話,你想看電影只能去電影院,想聽歌只能用網易音樂,QQ音樂之類的大型互聯網公司的軟件。
我記得十年前中國非常流行BT下載,這是P2P的下載模式,那個時候國內還有大型的網站和下載軟件,像是BT中國聯盟,當然還有影響更大的VeryCD電驢下載,這個相信大家都有印象,我自己也用BT下載過東西,后面這些網站和軟件因為盜版問題全部關掉了。
還記得當時國內論壇上到處都是“樓主,求種子”“留圖不留種”之類的留言。
我找了個2009年的網友回帖,聽說VeryCD要關閉,發帖訴苦,說每天工作回家后唯一的娛樂就是在VeryCD下載電影,電視劇看,希望不要關掉。
十年前想看美國電影,看美劇到網上下載就好了,現在只能去電影院,或者在優酷,搜狐之類的視頻網站收看美劇了,而且往往是要付費的。
不過從另一方面講,你想找反面例子也可以找得到,
最為典型的就是“喬丹”商標,直到2020年才一審敗訴,但是這個商標其實是2000年申請的,是屬于歷史遺留問題了。
像Windows的盜版,現在在國內也還依然存在。
但總的來說,中國人的收入水平在迅速提高,越來越厭惡山寨商品和盜版,像是十年前主導中國市場的山寨手機,就逐漸退出了市場,同時消費者對于原創,正版,品牌以及付費會員訂閱的接受度也在越來越高,再繼續搞仿制品,山寨品,市場空間在越來越小,中國企業也在越來越重視原創和技術研發,因為山寨之路越來越走不通了。
在這個歷史大潮下,你說中國侵犯知識產權的現象在越來越多,那顯然是不符合事實的,也是不符合邏輯的,就拿運動鞋來說,國產品牌安踏,李寧等銷售額迅速擴大,遠快于市場的增長,說明品牌鞋在擠占山寨鞋的空間。
像汽車消費,過去的十年間消費者購買的汽車均價在越來越貴,越來越注重品牌,10萬元以下的汽車市場占比越來越低,處于低端的自主品牌汽車受到了很大沖擊,市場份額下降,這些都是現實的已經發生的事情。
你說哪個車企還不知道搞自主研發提升品牌價值,說實話那是自尋死路。
我們也可以看下OECD(經濟合作與發展組織)組織發布的兩張圖,中國對美國支付的知識產權費用,圖1A中顯示了中國為使用美國知識產權支付的款項,從1999年的7.55億美元增長到2017年的83億美元——增長了11倍多。
而根據圖1B所示,中國對美國的知識產權使用費(藍線)增長快于中國的GDP(紅線)。說明支付的知識產權費用占GDP的比例在提高。
當然,對于美方來說,他要想找中國侵犯知識產權的現象,也并不困難,比如說“莆田鞋”,山寨奢侈品牌箱包,現在依然是存在的,但此種現象,在其他國家尤其是落后的發展中國家也大量存在,所以說這個東西,就是打口水仗,我說你做的不好,我說我在進步,大家各自為了自己的利益。
就中國而言,人均今天已經突破一萬美金,人民生活水平和企業科技水平不斷提高,不斷加強知識產權保護已經是歷史大勢了,不然的話我們的原創設計和技術將會受到傷害,也不利于產業升級,會導致我們無法跨入發達國家門檻。我國不會逆這一歷史潮流而動。
另外還有個典型的,就是指責中國沒有向國外生產商開放通信市場,但是實際上外資從中國的通信市場獲取了海量的利潤。
這個指責因為和我們普通人的感覺是相符合的,我們生活中確實沒有看到外國的電信運營商在中國運營,因此會本能的覺得中國確實就是違背了入世承諾。
這個其實是這樣的,首先在中國入世承諾的5.14條里面,沒有任何一條是承諾外資電信運營商獨資,最高只允許外資占比49%和50%。
原文如下,嫌長的可以跳過:
增值電信服務
該項服務包括如下類別:電子郵件、語音郵件、在線信息和數據檢索、電子數據交換、增值傳真服務(包括儲存和發送、儲存和檢索)編碼和規程轉換、在線信息和/或數據處理(包括交易處理)。
允許外商在上海、廣州和北京設立合資增值電信企業,并在這些城市內提供服務,無數量限制。合資企業中的外資不得超過30%。
在入世后1年內,地域擴大至包括成都、重慶、大連、福州、杭州、南京、寧波、青島、沈陽、深圳、廈門、西安、太原和武漢,但外資持股比例不得超過49%。
入世后2年內,將取消地域限制,但外資持股不得超過50%。
基礎電信服務(傳呼服務)
入世時允許外商在上海、廣州和北京設立合資企業,并在這些城市內及其之間提供服務,無數量限制,但合資企業中的外資不得超過30%。
于入世后1年內,地域擴大至包括成都、重慶、大連、福州、杭州、南京、寧波、青島、沈陽、深圳、廈門、西安、太原和武漢市內及這些城市之間的服務,但外資持股比例不得超過49%。于入世后2年內,將取消地域限制,外資持股不得超過50%。
移動話音及數據服務
加入時,允許外商在上海、廣州、北京設立外方持股比例不超過25%的合資企業,在這些城市內及三者之間提供服務,無數量限制。
于入世后1年內,擴展至成都、重慶、大連、福州、杭州、南京、寧波、青島、沈陽、深圳、廈門、西安、太原和武漢市內及這些城市之間的服務。外資持股可增至35%。
于入世后3年內,外資持股可增至49%。
于入世后5年內,取消地域限制。
國內及國際服務
國內業務包括:語音服務、分組交換數據傳輸業務、電路交換數據傳輸業務、傳真服務、國內專線電路租用服務。
國際業務包括:語音服務、分組交換數據傳輸業務、電路交換數據傳輸業務、傳真服務、國際閉合用戶群話語音和數據服務(允許使用專線電路租用服務)。
于入世后3年內,允許外商在上海、廣州、北京設立外方持股比例不超過25%的合資企業,并在這些城市內和三者之間提供服務。
于入世后5年內,地域擴展至成都、重慶、大連、福州、杭州、南京、寧波、青島、沈陽、深圳、廈門、西安、太原和武漢市內及這些城市之間,外資持股比例可增至35%。
于入世后6年內,取消地域限制。外資持股比例可增至49%。
我們在日常生活中雖然沒有看到外國運營商在中國大規模運營,但是我國三大運營商都有外資持股,中國移動,聯通,電信都在香港上市,并且都在美國證券交易所通過存托股份上市,都有外資持有股份,下圖是中國移動官網的上市股票,在香港上市+美國存托股份。
當然今年1月,特朗普政府通知中國三大運營商都在美國下市了。
下圖是中國電信2020年12月31日的股權結構,各個國有企業股權占比82.85%,有17.15%開放給公眾持股,其中十大股東的BlackRock(貝萊德集團),The Bank ofNew York Mellon corporation都是美資機構,中國這么龐大又有高額利潤的電信市場開放了一部分給外資持股,實際上不只是中國電信,中國移動,中國聯通都有美資股東,每年通過分紅是可以獲得固定收益的。
下圖是中國聯通的股權結構,其香港上市公司開放了20.1%的股權給公眾投資者,其中騰訊,阿里,京東等都有投資,而這些公司背后都有美資股權,當然也有美資也可以直接在香港投資。
反過來我們可以看下美國的AT&T運營商的股權結構,并沒有中方資本。
實際上你很難想象中國三大運營商在歐美建立大規模的通信網絡,或者中國資本大規模的持有美國運營商的股權,光是所謂國家安全審查這一關就過不去。
同樣的還有通信設備和企業IT市場,
長期以來美國是全球最大的通信設備和企業IT市場之一,
但中國的華為和中興被嚴格的擋在美國市場之外,長期試圖進入美國市場而不能,我們也知道在通信設備市場華為+中興占了全球市場差不多40%的份額,卻無法進入美國市場,這不得不說很可惜,
而美國的思科之類的設備廠家則一直在中國市場有銷售,可以說在這一塊雙方就是不對等的。
除了通信設備和企業IT市場,還有很大的一塊市場就是美國的智能手機市場,
美國的智能手機公司蘋果的產品可以在中國市場正常銷售,
蘋果公司僅僅在2021年的第一財季(也就是2020年的Q4),因為其新款iPhone 的上市,加上華為旗艦機因為芯片被禁銷量下滑,蘋果該季度在大中華區的銷售金額就高達213.13億美元。注意這是一個季度的銷售額就超過200億美元,不是一年。
光是這一項美國就能從中國市場賺走巨量的利潤。相反中國綜合實力最強的華為智能手機,即使在被制裁之前,也因為無法在美國和運營商合作銷售,導致幾乎無法進入美國市場。
在互聯網公司方面,美國的谷歌及其旗下的youtube,Facebook及其旗下的WhatsApp等因為各種原因現在無法在中國市場運營,這也是美方不斷指責中國的一個點,
但是一方面,涉及到中國法律遵從和意識形態問題,
另一方面,中國雖然沒有對美資互聯網公司開放市場,但是中國的互聯網巨頭的股權卻大量的被包括美資在內的外資持有,外資通過持有中國互聯網巨頭的股權,充分的享受到了中國超大的互聯網市場發展的紅利,從中獲取了巨額的利潤,而中國并沒有對此進行行政干預。
相反中國資本卻很難成為美國大型互聯網公司的主要股東,
你能想象中資成為谷歌,推特,Facebook的大股東嗎?先不要說到美國政府審查了,光是這些意識形態強烈的公司自身就不會允許,這是超出商業范圍以外的考量了。
典型的就是美國雅虎公司(現在是Altaba了)長期是阿里的大股東,阿里可以說是拯救雅虎的大救星。
2012年,雅虎時任CEO湯普森和阿里巴巴達成了一項轉讓股權的交易。
阿里巴巴集團斥資76億美元(其中包括63億美元現金和8億美元的阿里巴巴優先股),從雅虎手中回購了20%的本公司股權。
2014年10月,雅虎在阿里巴巴集團IPO交易中,以每股63美元的價格出售了1.4億股股票,得到94億美元收入。
中國的互聯網巨頭,只要一查詢,都有美國資本持股,這么一塊大蛋糕,美國資本從中是獲取了大量好處的,但是反過來,美國的互聯網巨頭,有沒有可能大量讓中資機構持股?
要知道,美帝的互聯網巨頭,動輒市值數千億美元,也是塊大蛋糕。
下圖是Facebook的十大股東,并沒有中資的存在。
實際上,中資互聯網巨頭的股權大量被外資持有股權,這個情況對于近幾年新崛起的互聯網巨頭依然存在,像去年9月份當特朗普政府在強迫Tik Tok出售時,美國媒體如CNBC披露美資擁有字節跳動大約41%的股權,美國媒體因此認為由于字節母公司的股權大量被美資持有,因此其旗下的TikTok美國公司只要再出售一部分股權,就能夠形成美方控股的局面。
要知道字節跳動旗下的TikTok可以說是中國出海最為成功的應用了。
互聯網企業是目前中國最為賺錢的行業,外資的獲利有多么豐厚呢?除了上面雅虎的例子,
2021年4月8日港股盤前,騰訊控股發布公告,稱公司接獲Prosus(騰訊控股股東,由南非Naspers擁有大多數股權)通知,Prosus全資附屬公司MIHTC已于2021年4月8日與配售代理訂立配售協議,將按總價1141.7455億港元(約合人民幣959.4億元)出售總計約1.92億股股份,占已發行股份總數約2%。
在此之前,Prosus間接持有約29.61億股騰訊控股股份,占已發行股份總數約30.87%。減持完成后,Prosus間接持有騰訊控股股份將減少至27.69億股,占已發行股份總數約28.86%。Prosus是一家控股公司,用來持有南非投資公司Naspers(南非報業)的國際互聯網資產。
想一下,出售僅僅2%的股份就獲利差不多1000億人民幣,而出售之后手中還有接近29%的股權,這個獲利還不夠大嗎?
騰訊的第一大股東Naspers(通過Prosus持股騰訊),其在南非的上市公司,大約30%的股權和分紅屬于北美投資者,股權持有比例僅次于南非的機構股東。
因此總的來說,中國的通信市場,
通過三大運營商開放讓外資直接和間接持有部分股權;
通過運營商的通信設備市場也對外開放購買;
通過開放國外終端品牌蘋果等公司在中國市場正常銷售;
通過開放國內互聯網巨頭讓外資大量持股,
國內市值最高的兩大巨頭阿里,騰訊的第一大股東都是外資,而如果再看美團,字節跳動,快手,百度等,也都有外資持有不少股權。
中國市場實際上讓外資獲得了巨額的收益,指責中國沒有開放通信市場,并不是說外資從中國通信市場賺不到錢,實際上還是因為利益,覺得還想要更多,跟中國討價還價罷了。
我們再看第三類,那就是中國確實或者至少是看起來是有改進空間的,但是我們要理解背后的客觀原因和利益博弈。
這個我們可以看下世貿組織總干事的評價。
2011年,中國正值入世十周年,WTO時任總干事拉米前來中國參加紀念活動。他公開表示中國入世后的表現是A+(Aplus),同時表示中國履行了規則,雖然并沒有做到100%,畢竟規則的理解有時存在爭議,沒有哪個世貿組織成員的履行是盡善盡美的。
在幾年后,2018年2月19日召開的由聯合國貿發會議舉辦的日內瓦對話會上,
已經卸任的拉米指責了美國對世貿組織規則的破壞,指出世貿組織成員需要做好一個沒有美國的世貿組織的思想準備。
談到中國時,他說:“中國沒有欺騙,美國在這一點上錯了,中國遵守了她當年簽下的WTO承諾。不過,中國非常有效地使得WTO紀律并沒有象以往約束老成員那樣能夠約束中國,特別是在補貼與政府采購領域。
以中國今天在世界經濟中的體量,中國沒有開放政府采購市場,這很不公平。在這方面,美國確實有權說這有些不平衡。這些問題應該被廣泛認識,并且開展坦誠的對話。”
注意拉米提到了兩個東西,一個是政府采購,一個是補貼,
可以說是委婉的認為中國在這兩方面還需要改進,不過拉米也說了中國是在利用規則保護自己的利益。
先看在政府和國企采購平等對待方面,這一條我們確實做了承諾,在入世承諾文本里面:
6.2 政府采購
中央和地方各級所有政府實體,以及專門從事商業活動以外的公共實體,將以透明的方式從事其采購,并按照最惠國待遇的原則,向所有外國供應商提供參與采購的平等機會,即:如一項采購向外國供應商開放,
則將向所有外國供應商提供參加該項采購的平等機會(例如,通過招標程序)。此類實體的采購將只受已公布,且公眾可獲得的法律、法規、普遍適用的司法決定、行政決定以及程序(包括標準合同條款)的約束。
在加入后成為《政府采購協定》的觀察員,跟蹤有關活動。一旦條件具備,盡快開始加入談判。
在入世協定書的第三條里面也有提及:
第3條非歧視
除本議定書另有規定外,在下列方面給予外國個人、企業和外商投資企業的待遇不得低于給予其他個人和企業的待遇:
(a)生產所需投入物、貨物和服務的采購,及其貨物據以在國內市場或供出口而生產、營銷或銷售的條件;及
(b)國家和地方各級主管機關以及公有或國有企業在包括運輸、能源、基礎電信、其他生產設施和要素等領域所供應的貨物和服務的價格和可用性。
也就是說,政府采購也好,國企采購也好,不歧視外資企業。
在實際操作中,我國政府和國企采購是不會排除外資參與的,當然實際上是不是傾向于國產,這個大家心中有答案,舉個例子在中美關系形勢變化下,你要說采購美國產品的時候純從商業出發考慮,不考慮安全問題是不可能的。
但實際上國內學者統計到2018年的記錄,中國卻從來沒有在這方面被其他國家申訴過。
我查詢了國內學者對此的研究,簡單的說,兩個原因,
第一點是ITIF基金會的報告中提到的“國企基于商業考慮采購”的承諾是“中國特殊條款”,大多數國家都沒有此承諾,
美國也沒有,其實對中國并不公平。
像美國政府在采購方面對中國廠家限制就很嚴厲,中國航天科技,航天科工不可能拿到NASA的火箭發射合同,甚至都沒有資格參與競標,更不要說和SpaceX擁有平等的待遇,當然美國人也有理由,畢竟他們說自己入世時又沒有做過相關承諾。
第二點是,又因為是中國的特殊條款,所以世貿組織并沒有具體的規則來針對這一條進行管理和約束,所以中國加入WTO后,從來沒有在此領域敗訴過,實際上有國內學者查詢了WTO的卷宗,直到2018年也沒有發現有國家或者企業就這條對中國進行起訴,因為缺乏具體規則和過硬的證據。
這也是前WTO總干事拉米說的“中國沒有欺騙…..(但中國)非常有效地使得WTO紀律并沒有象以往約束老成員那樣能夠約束中國”。
當然即使這樣,這一條中國近年來在不斷想辦法優化,以擴大對外資的吸引力,例如為保障外資企業平等參與政府采購,2020年1月1日實施的《外商投資法》明確規定,國家保障外商投資企業依法通過公平競爭參與政府采購活動。政府采購依法對外商投資企業在中國境內生產的產品、提供的服務平等對待。
類似的還有出口補貼顯著減少,注意即使在美國ITIF基金會的報告中,
也列明了中國的承諾只是出口補貼要顯著減少,并不是完全取消。
而在中國做出的入世承諾中,也明確寫明了在取消WTO《補貼與反補貼措施協定》第3條規定的補貼的同時,中國會保留超過20個出口補貼項目,并且有的補貼項目還會在后續通知WTO,也就是說并不是完全取消出口補貼,而是會保留相當一部分。
在入世承諾中,我國對出口補貼的承諾只是部分取消:
3.12 出口補貼
需取消的補貼
我國承諾遵守WTO《補貼與反補貼措施協定》,逐步取消與規則不符的補貼措施。
在加入時取消所有屬于《補貼與反補貼措施協定》第3條禁止的以出口實績為條件而給予的補貼,如以出口實績為基礎優先獲得外匯和貸款等補貼項目。
為此,在不遲于加入時,停止維持所有先前存在的出口補貼計劃,并自加入時起,停止在此類計劃下作出額外支付或支出,也不再免除稅收或授予任何其他利益。這一承諾涵蓋各級政府在法律上或事實上所給予的補貼。
自加入時起,取消所有屬于《補貼與反補貼措施協定》第3條禁止的視使用國產貨物替代進口貨物情況而給予的補貼。
注:中國在議定書附件5B中提交了屬《補貼與反補貼措施協定》第3條范圍內的禁止性補貼清單及其取消時間表。
與此同時,中國保留約20個補貼項目,并在議定書附件5A中列明。我國可以保留和實施的補貼項目并不局限于這些項目,有些尚未通知WTO的補貼項目,中國將逐步收集有關信息,改進補貼的通知工作。
在可申訴的補貼方面不享受發展中成員的優惠待遇
在這里要說明下,出口退稅并不是出口補貼,因為出口商品在對方國內還是要征稅的。
爭議點在于,中國的出口補貼是不是“顯著的減少”了?
關于出口補貼,我們說幾個事實,
第一點,如果在出口補貼方面,認為中國的做法有問題,
完全可以在WTO框架內進行上訴,中國一向維護全球多邊機制,維護全球化的局面,中國對于WTO的判決是認賬的,也是會執行的。
我國之前稀土資源大量廉價出口,造成了不少問題,之后我國在2010年采取了稀土出口配額制,結果被美國投訴到了世界貿易組織,最終中國敗訴,結果中國商務部發布的《2015年出口許可證管理貨物目錄》,明確稀土出口執行出口許可證管理,僅需企業拿出口合同申領出口許可證即可。這也意味著稀土出口配額正式取消。
說實話,這其實是對保存我們寶貴的稀土資源是不利的,但還是執行了判決。
第二點,背后還有利益博弈的問題,在要求中國取消部分出口補貼的同時,歐盟和美國卻堅持不承認中國市場經濟地位,以此可以繼續保持對部分中國產品征收反傾銷關稅的權利,而認定反傾銷的方式,是通過和第三國替代價格進行比較,這對中國其實是不公平的。
這一點中國和歐美對待入世文本的理解不一致,中國認為是入世15年后自動獲得市場經濟地位,也就不再用第三國替代價格判定,在中國發布的入世承諾中文版中有這樣的條款:
3.15 WTO成員對中國產品的反傾銷條款
WTO成員承諾,在中國加入后15年內完全取消目前在對中國出口產品進行反傾銷調查時使用第三國替代價格的做法。議定書規定,在此過渡期內,WTO成員仍可以對中國出口產品使用替代國價格計算傾銷幅度,但是,只要接受調查的生產企業能夠證明,其出口產品是在市場經濟條件下生產的,則WTO成員應遵守WTO《反傾銷協定》,采用被調查產業的國內生產成本計算傾銷幅度。
上述過渡性條款的模式也適用于反補貼措施。
在中國加入世貿組織議定書(標準中文版全文)
第15條(d)條款中是這么寫的:
“一旦中國根據該WTO進口成員的國內法證實其是一個市場經濟體,則(a)項的規定即應終止,但截至加入之日,該WTO進口成員的國內法中須包含有關市場經濟的標準。
無論如何,(a)項(ii)目的規定應在加入之日后15年終止。
此外,如中國根據該WTO進口成員的國內法證實一特定產業或部門具備市場經濟條件,則(a)項中的非市場經濟條款不得再對該產業或部門適用。 ”
上面提到的(a)項(ii)目是這么規定的。
(ii)如受調查的生產者不能明確證明生產該同類產品的產業在制造、生產和銷售該產品方面具備市場經濟條件,則該WTO進口成員可使用不依據與中國國內價格或成本進行嚴格比較的方法。
中國和歐盟和美國就市場經濟地位問題進行了較長時間的爭議,
分歧點在于中國認為當初協議是說入世15年后中國自動獲得市場經濟地位,而歐盟和美國則認為結合協議上下文并沒有這個含義,所以到了2016年歐盟和美國都拒絕給予中國市場經濟地位,這樣可以繼續以反傾銷的理由對中國出口商品征收高關稅。
不承認中國市場經濟地位,歐美也有自己的理由,那就是說中國存在出口補貼和傾銷,而判斷傾銷的標準是使用第三國替代價格計算,而不是與中國國內價格或成本進行嚴格比較,這明顯對中國不利,中國對此是反對的,所以這是個利益博弈。
第三點,在利益博弈過程中,為了獲取市場經濟地位,
中國做出了讓步,像紡織,服裝和鞋類這種大金額的勞動密集型出口商品,中國都取消了出口補貼。這些產品的出口金額可不小,例如紡織品和服裝,中國2020年出口金額就高達2912.2億美元。
美國在2015年2月,針對中國在7個行業向本國出口企業提供的補貼向世界貿易組織(WTO)提起申訴。這些行業是:紡織、服裝和鞋類;先進材料和金屬;輕工業;特種化學品;醫療產品;五金建材;以及農業。
2016年中國和美國達成協議,中國取消了以上領域的出口補貼,媒體認為這是中國為了獲取市場經濟地位做出的讓步。
當然有人說了,協議上明面上取消了,誰知道暗地里有沒有繼續做呢?
其實是這樣的,如果繼續這樣做,至少在國家法律法規遵從層面,是貿易不合規的,繼續這樣做就會有合規風險,相比之前一定是會有改善的。而且中美都達成了協議,你說中國一點都不會執行,一點都不會改善,覺得有可能嗎?中國對于自己簽署的國際協議一向履行還是不錯的。
再重復一下,中國從來沒有在入世文件中承諾取消所有的出口補貼,即使是美國ITIF基金會的報告也只是說中國承諾出口補貼會顯著減少,而不是取消。
中國也在入世后的確逐漸取消了一些行業的出口補貼。
但究竟是不是達到了“顯著減少”的標準,如果有爭議,是可以到WTO申訴的,中國對于WTO的判決,一向還是認賬的,因為中國目前是國際多邊體制的維護者,像上面七大行業的出口補貼,美國申訴到WTO一年后,中國和美國達成雙邊協議就取消了。
其實補貼這個東西,全球各國都在搞,比如一些發達國家對農產品的補貼,
美國給波音,特斯拉這些科技企業都有不少補貼,而這兩家每年也從美國有出口的。
2020年10月,WTO就裁決美國非法補貼波音,允許歐盟對美國出口的40億美元商品征稅進行報復。這說明,有問題去WTO申訴就好,當然互相之間輿論打嘴仗也是免不了的。
最后,我想再說三個觀點,
第一點是我們部分國人要改掉盲目的,不加驗證的相信發達國家對我國的指責的毛病,國與國之間的互相指責,都是夾雜著大量的利益訴求在里面的,根本上就是利益博弈。
下意識的就站在對方的立場,宣傳對方的觀點,這只會對對方的利益有利,而對本國的利益不利。我們就不說中國和外國,就說全球任何兩個國家,有一個國家是會很爽快的欣然接受另一個國家的指責的嗎?
不會有這樣的情況,就跟法庭上的雙方辯護律師一樣,一定會拼命想辦法維護自身的利益。
就不說貿易爭端這種和道義關聯性不大的事情了,
就說那些道義和是非都非常明顯的例子,
根據BBC的報道,美國眾議院2012年6月18日全票表決通過,以立法形式向曾經排斥和歧視華人的做法道歉,這一道歉案2011年10月獲得美國參議院的通過,但非常明確表明,立法道歉并不會向受到這一排華法案影響的美籍華裔家庭索賠提供依據。
嗯花了如此漫長的時間才正式道歉,而且還剝奪了華裔的索賠權,可見其對自身利益的維護。
再以中國二戰勞工起訴日本公司奴役和強迫勞動,數千人被強迫勞動折磨致死,可以看下在漫長的歷時一二十年甚至更久的起訴過程中,日本政府,法院和公司是如何拼命的為自己辯護,拒不承認中國勞工的索賠權,維護自己的利益的。
以上可以看出,國與國之間即使道義曲直非常明顯的事情,也不會存在一方會欣然的爽快的接受對方觀點的情況,都會想盡辦法為自己的利益著想。
更何況中國和西方國家的交往,我們能對西方做出什么違反人類基本道義的事情的么,
難道我們還能不經聯合國授權派兵到西方國家領土,或者派空軍轟炸西方國家?我們和西方國家也沒有領土爭端,說白了主要還是經濟利益沖突。
兩個國家有利益博弈和爭議,是很正常的事情,必須要學會站在本國的立場考慮問題。
第二點,西方并不在道義上比中國高,要學會甄別他們的輿論話語。
發達國家輿論宣傳機器能力很強,因此他們會創造性的使用一些簡單易懂的總結性語句進行傳播,例如“中國違背入世承諾”“中國破壞國際秩序”“中國在非洲制造債務陷阱”之類,
這其中無一不是把中國放在道義低點的位置,而把自己放在道義高點的位置,
這些短語易于傳播,通俗易懂,能對中國造成很大的輿論壓力,但是卻和事實有很大的背離,雙方真正的道義位置也并非如此。
我們要學會去甄別哪些是對方無中生有的抹黑進行輿論戰造勢,
哪些是對方不合理的指責,比如中國其實做的不錯但非說我們做的不好的,比如全球各國都做的不太好,包括他自己都做的不好但就是專挑中國來打擊的,
哪些是屬于合理的爭議范圍,雙方可以通過雙邊或者國際框架下協商解決的,
而絕不是全盤的接受。
第三點,對于國際規則,由于規則以及各國實際情況的復雜性,沒有任何一個國家是可以做到100%的不違規的,
就以WTO為例子,歐盟,美國,中國作為全球貿易大戶都有各種被起訴和敗訴記錄,
世貿組織貿易爭端申訴勝率一般很高,一般在90%左右,這意味著被起訴基本意味著敗訴。
而美國是WTO歷史上被起訴次數最多的國家,遙遙領先,當然被起訴的案件大部分敗訴。
尤其是從2017年8月-2018年7月,美國被WTO成員國起訴次數高達17次,創下了12個月內單一成員被起訴次數的紀錄。其中有兩起案件分別是中國訴美國301關稅案和232關稅案,其余15起是其他WTO成員對美起訴。
歐盟國家則在累計被起訴次數上排全球第二位,歐盟也是大部分被起訴案件中敗訴。
下圖來自對外經濟貿易大學教授崔凡的統計,從1995年1月-2019年12月的被訴次數,美國155次遙遙領先,歐盟85次排第二。
那么中國在WTO被起訴多少次呢?下圖來自位于美國的研究機構ChinaPower的中文官網,從2002年-2019年,中國總共被申訴了44次,申訴別人21次。
美國,歐盟,中國都有違規被申訴的記錄,而且中國次數還更少些。
不過更有意思的是,中國作為申訴方或被訴方時共參與過65次爭端解決。這其中大部分(81.5%)是與美國(39次)和歐盟(14次)進行的。中國被訴的案件52.2%由美國發起,而中國發起的21次申訴中有76%都針對美國,主要就是和美國對著干。
中國是全球多邊機制維護者,從聯合國,到世界衛生組織,到世界貿易組織,你都能看出中國都是支持這些國際組織發揮作用,反對美國退群另外搞小團伙的,反而是美國國內有強大勢力總是想鬧著以退群來威脅國際組織按照自己希望的方式改變。
把中國說成是故意不遵守國際規則,不遵守承諾的低道義值國家,這在邏輯上就說不通,因為中國明顯是全球化和多邊體制的維護者而非破壞者。
如果中國真的頻繁的,故意的,大量的違反國際規則和破壞自己的承諾,
一方面中國會在國際組織中遭遇世界各國的申訴,
而實際情況看主要壓力其實就是來自美國,
除了上文的ChinaPower統計的2002-2019年的數據外,我們也可以看下2012年12月發表的《國際經濟與政治》上的文章《中國與世界貿易組織爭端解決機制》,
統計 2002 -2011年10 月5 日,全球申訴過中國的 WTO 成員只有 5 個,其中美國對中國申訴 12 件,歐盟對中國申訴 5 件,墨西哥對中國申訴 3 件,加拿大對中國申訴 2 件,危地馬拉對中國申訴 1 件,總共23件,美國就占了超過50%。
由于對中國申訴的多起案件其實是同一個議題,所以除了單獨由歐盟提起的兩起案件外,美國實際上參與了對中國申訴的所有案件,占比高達91%。
另一方面如果中國真的頻繁故意違反WTO規則,說明中國應該會對目前的WTO主導的國際多邊貿易體制非常不滿才對,而事實上中國是明顯的維護者。
像美國在特朗普政府時期,成為WTO的最大反對者,
以2020年為例子,2020年4月,一份針對美加兩國貿易糾紛且對加拿大有利的裁決結果在世貿組織(WTO)出爐,但特朗普政府卻發聲明表示,沒有遵守這份裁決的義務,實際上特朗普政府還多次威脅要退出WTO。
尤其是美國從2018年開始逐步對我國數千億美元商品加征關稅,對我國造成了較大的負面影響,損害了我國的利益,是完完全全的違反國際規則,
2020年9月,WTO也裁定美國對中國加征關稅是違法貿易規則的,但美國對此表達強烈不滿,甚至威脅要退出WTO,這并不只是特朗普政府的問題,美國現在已經是拜登政府了,也并沒有打算取消關稅執行判決,這也是在違反國際規則。
今天只是簡單的聊聊中國和國際規則,國際秩序的關系,
總之我們要理解世界的復雜性,學會甄別他國的聲音,并且站在中國的立場說話,是我們需要堅持做到的事情。
件被看作是 JavaScript 與網頁之間交互的橋梁,當事件發生時,可以通過 JavaScript 代碼(函數)執行相關的操作。例如,用戶可以通過鼠標拖曳登錄框,改變登錄框的顯示位置;或者在閱讀文章時,選中文本后自動彈出分享、復制選項。本章將對 DOM 中的事件進行詳細講解。
事件可被理解為是 JavaScript 偵測到的行為,這些行為指的就是頁面的加載、鼠標單擊頁面、鼠標滑過某個區域、按下鍵盤等具體的動作,它對實現網頁的交互效果起著重要的作用。在深入學習事件時,需要對一些非常基本又相當重要的概念有一定的了解。
事件處理程序指的就是 JavaScript 為響用戶行為所執行的程序代碼。例如,用戶單擊 button 按鈕時,這個行為就會被 JavaScript 中的click 事件偵測到;然后讓其自動執行,為 click 事件編寫的程序代碼,如在控制臺輸出“按鈕被單擊了”。
事件驅動是指,在 Web 頁面中 JavaScript 的事件,偵測到的用戶行為(如鼠標單擊、鼠標移入等),并執行相應的事件處理程序的過程。
事件綁定指的是為某個元素對象的事件綁定事件處理程序。在 DOM 中提供了3種事件的綁定方式。下面將針對以3種事件綁定方式的語法以及各自的區別進行詳細講解。
事件的行內綁定式是通過HTML標簽的屬性設置實現的,具體語法格式如下。
<div onclick="alert('handle click')"></div>
在上述語法中,div 可以是任意的HTML標簽,如 <button>、<input>標簽等;事件是由 on 和事件名稱組成的一個 HTML 屬性,如單擊事件對應的屬性名為 onclick;事件的處理程序指的是 JavaScript 代碼,如匿名函數等。
需要注意的是,由于開發中提倡 JavaScript 代碼與 HTML 代碼相分離。因此,不建議使用行內綁定事件。
動態的綁定方式很好地解決了JavaScript代碼與HTML代碼混合編寫的問題。在JavaScript代碼中,為需要事件處理的 DOM 元素對象,添加事件與事件處理程序。具體語法格式如下。
div.onclick=function handleClick () {
console.log('handle click');
};
在上述語法中,事件的處理程序一般都是匿名函數或有名的函數。在實際開發中,相對于行內綁定來說,事件的動態綁定的使用居多。
行內綁定與動態綁定除了實現的語法不同以外,本質是相同的,都是給 DOM 元素綁定了一個 onclick 屬性。
為了給同一個 DOM 對象的同一個事件添加多個事件處理程序,DOM中引入了事件流的概念,可以讓DOM對象通過事件監聽的方式實現事件的綁定。由于不同瀏覽器采用的事件流實現方式不同,事件監聽的實現存在兼容性問題。通常根據瀏覽器的內核可以劃分為兩大類,一類是早期版本的IE瀏覽器(如IE6~8),一類遵循W3C標準的瀏覽器(以下簡稱標準瀏覽器)。
接下來,將根據不同類型的瀏覽器,分別介紹事件監聽的實現方式。
(1)早期版本的IE瀏覽器
在早期版本的IE瀏覽器中,事件監聽的語法格式如下。
DOM對象.attachEvent(type,callback);
在上述語法中,參數 type 指的是為 DOM 對象綁定的事件類型,它是由 on 與事件名稱組成的,如 onclick。。參數 callback 表示事件的處理程序。
(2)標準瀏覽器
標準瀏覽器包括IE8版本以上的IE瀏覽器(如IE9~11),新版的Firefox、Chrome等瀏覽器。具體語法格式如下。通過這種方式我們可以給元素注冊多個事件處理函數,而 btn.onclick=fn 是賦值操作只能設置一個事件處理函數。
DOM對象.addEventListener(type, callback, [capture]);
在上述語法中,參數 type 指的是 DOM 對象綁定的事件類型,它是由事件名稱設置的,如 click。參數 callback 表示事件的處理程序。參數 capture 默認值為 false,這個屬性后面單獨介紹,一般情況我們都使用它的默認值。
現在 IE 瀏覽器已經被淘汰,所以我們不需要再去記憶 attachEvent() 的用法,但是我們需要了解過去,過去在使用這種方式注冊事件的時候需要處理瀏覽器的兼容性,下面我們演示下:
function addEventListener(element, type, listener) {
// 能力檢測: 就是要看當前的瀏覽器是否支持此標簽對象的屬性或是方法
if (element.addEventListener) {
element.addEventListener(type, listener, false);
} else if (element.attachEvent) {
element.attachEvent('on' + type, listener);
} else {
element['on' + type]=listener;
}
}
在事件處理函數中的 this 指向當前觸發該事件的 DOM 元素。
link.onclick=function handleLink () {
photo.src=this.href;
p.textContent=this.title;
return false;
};
但是通過行內綁定注冊的事件,調用的函數中 this 指向的是 window。
<button onclick="handle()">按鈕</button>
<script>
function handle () {
// 此處的 this 指向 window
console.log(this);
}
</script>
行內綁定事件 onclick="handle()" 中的 "" 雙引號內部其實可以看做是一個匿名函數,"" 雙引號內部的這個匿名函數才是事件處理函數,在事件處理函數中又調用了 handle() 方法。
<!-- 此處的 this 指向的是觸發事件的對象 button -->
<button onclick="handle(this)">按鈕</button>
<script>
function handle (btn) {
// 此處的 this 指向 window
console.log(btn);
}
</script>
綁定事件的元素可以解除綁定,例如:我們可以讓按鈕點擊一次之后解除事件綁定。三種綁定事件的解除事件的方式不同,下面我們分別來介紹。
行內綁定事件和動態綁定事件本質上都是給 DOM 元素設置 onclick 屬性,對應的解除綁定事件的方式都是把 onclick 屬性重新設置為 null。
當按鈕執行完點擊事件的處理程序后立即解除事件的綁定
<button onclick="handle(this)">按鈕</button>
<script>
function handle (btn) {
alert('Hello');
btn.onclick=null;
}
</script>
btn.onclick=function handle () {
this.onclick=null;
};
標準綁定事件使用 addEventListener(type, callback, [capture]); 方法,對應的解除綁定使用的方法是 removeEventListener(type, callback, [capture]),需要注意的是,如果注冊的事件需要解除的話,使用 addEventListener() 注冊事件的時候,傳入的 callback 不能是匿名函數,因為解除事件綁定的時候還需要引用這個函數。
const div=document.querySelector('#div');
div.addEventListener('click', handle);
function handle () {
alert('hello');
this.removeEventListener('click', handle);
}
我們已經會使用 addEventListener(type, callback, [capture]),方法給元素注冊事件,但是這個方法的第三個參數的作用我們還不清楚,下面我們就來介紹該方法的第三個參數,這里我們需要先來學習 DOM 中的事件流(事件模型)。
DOM (文檔對象模型)結構是一個樹型結構,當一個HTML元素產生一個事件時,該事件會在元素結點與根節點之間按特定的順序傳播,路徑所經過的節點都會收到該事件,這個傳播過程可稱為 DOM 事件流。
事件順序有兩種類型:事件捕捉和事件冒泡。
這是 IE 瀏覽器對事件模型的實現,也是最容易理解的。冒泡,顧名思義,事件像個水中的氣泡一樣一直往上冒,直到頂端。
從DOM 樹型結構上理解,就是事件由葉子節點沿祖先結點一直向上傳遞直到根節點;從瀏覽器界面視圖 HTML 元素排列層次上理解就是事件由具有從屬關系的觸發事件的元素一直傳遞到根元素直到文檔對象。
addEventListener(type, callback, [capture]),該方法的第三個參數為 false 的時候設置觸發事件的方式為事件冒泡,該參數默認為 false。
一般情況下,我們都會使用事件冒泡的方式注冊事件。
const outer=document.querySelector('#outer');
const inner=document.querySelector('#inner');
outer.addEventListener('click', function () {
console.log('點擊了 outer');
}, false);
inner.addEventListener('click', function () {
console.log('點擊了 inner');
}, false);
document.body.addEventListener('click', function () {
console.log('點擊了 body');
}, false);
document.addEventListener('click', function () {
console.log('點擊了 document');
}, false);
window.addEventListener('click', function () {
console.log('點擊了 window');
}, false);
執行結果:
使用行內綁定和動態綁定事件的方式默認使用的是事件冒泡。
Netscape 的實現,它與冒泡型剛好相反,由 DOM 樹最頂層元素一直到觸發事件的元素。
addEventListener(type, callback, [capture]),該方法的第三個參數為 true 的時候設置觸發事件的方式為事件捕獲。
const outer=document.querySelector('#outer');
const inner=document.querySelector('#inner');
outer.addEventListener('click', function () {
console.log('點擊了 outer');
}, true);
inner.addEventListener('click', function () {
console.log('點擊了 inner');
}, true);
document.body.addEventListener('click', function () {
console.log('點擊了 body');
}, true);
document.addEventListener('click', function () {
console.log('點擊了 document');
}, true);
window.addEventListener('click', function () {
console.log('點擊了 window');
}, true);
執行結果:
使用行內綁定和動態綁定事件的方式無法使用事件捕獲。
我們已經對上面兩個不同的事件模型進行了解釋和對比。DOM 標準同時支持兩種事件模型,即事件捕獲與事件冒泡,但是,事件捕獲先發生。兩種事件流都會觸發 DOM 中的所有對象,從 document對象開始,也在 document 對象結束(大部分兼容標準的瀏覽器會繼續將事件是捕捉/冒泡延續到window 對象)。
如圖:首先是捕獲傳遞事件,接著是冒泡傳遞,所以,如果一個處理函數既注冊了捕獲型事件的監聽,又注冊冒泡型事件監聽,那么在 DOM 事件模型中它就會被調用兩次。
DOM 標準的事件模型最獨特的性質是,文本節點也會觸發事件(在IE不會)。
事件委托,通俗地來講,就是把一個元素的處理事件的函數委托到另一個元素。
一般來講,會把一個或者一組元素的事件委托到它的父層或者更外層元素上,真正綁定事件的是外層元素,當事件響應到需要綁定的元素上時,會通過事件冒泡機制從而觸發它的外層元素的綁定事件上,然后在外層元素上去執行函數。
舉個例子,比如一個宿舍的同學同時快遞到了,一種方法就是他們都傻傻地一個個去領取,還有一種方法就是把這件事情委托給宿舍長,讓一個人出去拿好所有快遞,然后再根據收件人一一分發給每個宿舍同學。
在這里,取快遞就是一個事件,每個同學指的是需要響應事件的 DOM 元素,而出去統一領取快遞的宿舍長就是代理的元素,所以真正綁定事件的是這個元素,按照收件人分發快遞的過程就是在事件執行中,需要判斷當前響應的事件應該匹配到被代理元素中的哪一個或者哪幾個。
下面我們來做一個練習,為下面的每一個 li 注冊點擊事件,當點擊當前 li 的時候打印 li 中的文本內容。
<ul id="list">
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
......
<li>item n</li>
</ul>
首先我們用傳統的方式來實現,先獲取到頁面上所有的 li,然后遍歷所有的 li,給每一個 li 注冊點擊事件,這里使用 addEventListener() 注冊事件的時候省略了第三個參數,默認為 false,事件冒泡的方式。
這樣做不好的地方有兩點,第一:我們需要為每一個 li 元素創建一個新的事件處理函數,每次創建都需要銷毀時間和內存。第二:當點擊按鈕往 ul 中添加新的 li 元素的時候需要給新創建的 li 注冊點擊事件。
const lis=document.querySelectorAll('#list li');
lis.forEach(function (li) {
li.addEventListener('click', function () {
console.log(this.textContent)
});
});
下面我們使用事件委托的方式優化上面的代碼,把點擊事件注冊給父元素 ul,當點擊 li 的時候通過事件冒泡把點擊事件傳遞給父元素 ul。
const ul=document.querySelector('#list');
ul.addEventListener('click', function () {
console.log('test');
// 此處的 this 是注冊事件的元素 ul
console.log(this);
});
代碼改完之后點擊 li,這段代碼確實可以執行,但是我們的目標是打印 li 之間的內容,而通過打印發現此處的 this 不是我們想要的當前點擊的 li,而是注冊事件的元素 ul。所以這里需要強調一點,在注冊事件的時候,事件源是注冊事件的對象。
那如何獲取當前觸發事件的元素 li 呢?當事件被觸發的時候事件處理函數會接收一個參數,這個參數叫做事件對象,事件對象可以提供觸發事件的時候相關的數據,下一小節詳細介紹,這里我們先用事件對象解決當前的問題,事件對象中有一個 target 屬性,這個屬性就是當前觸發事件的對象。
在 IE 瀏覽器中獲取事件對象的方式不同,IE 中是通過 window.event 獲取事件對象,以前在獲取事件對象的時候還要處理瀏覽器兼容性問題,IE 瀏覽器現在已經被淘汰所以瀏覽器兼容性的處理我們就不再演示。
const ul=document.querySelector('#list');
// 事件參數(對象) e
ul.addEventListener('click', function (e) {
// e.target 觸發事件的元素
console.log(e.target.textContent);
// 注冊事件的元素
console.log(this);
});
到這里這個案例就完成了,我們再來擴展下這個案例,如果想要點擊特定的 li 來觸發事件該如何實現?
<ul id="list">
<li>item 1</li>
<li class="cls">item 2</li>
<li class="cls">item 3</li>
......
<li>item n</li>
</ul>
如上代碼,如果想點擊具有特性類樣式或者特定 id 的元素觸發事件,可以通過判斷當前點擊的元素 e.target 的類樣式或者 id 屬性進行判斷。
if (e.target.className==='cls') {
// ....
}
但是如果想像 CSS 選擇器一樣更加靈活的匹配的話,上面的判斷不夠靈活,這里可以使用 元素.matches(選擇器) 來匹配特定元素。當元素匹配指定的選擇器返回 true。
const ul=document.querySelector('#list');
ul.addEventListener('click', function (e) {
// matches 方法,當元素匹配指定的選擇器返回 true
if (e.target.matches('.cls')) {
console.log(e.target.textContent);
}
});
利用事件冒泡的特性,將本應該注冊在子元素上的處理事件注冊在父元素上,這樣點擊子元素時發現其本身沒有相應事件就到父元素上尋找作出相應。這樣做的優勢有:1. 減少內存消耗,避免重復創建相同事件處理函數,只需要把多個子元素的事件委托給父元素。2.隨時可以添加子元素,添加的子元素會自動有相應的處理事件。
const tbody=document.querySelector('tbody');
tbody.addEventListener('click', function (e) {
// 注冊事件的元素 tbody
// console.log(this);
// 觸發事件的元素(你點擊的那個元素)
// console.log(e.target)
// 判斷元素是否是指定的元素
// console.log(e.target.matches('.del'))
if (e.target.matches('.del')) {
e.target.parentNode.parentNode.remove();
}
});
每當觸發一個事件,就會產生一個事件對象 event,該對象包含著所有與事件有關的信息。包括導致事件的元素、事件的類型以及其他與特定事件相關的信息。上一小節中我們使用事件對象獲取觸發事件的元素。
例如:鼠標操作產生的 event中會包含鼠標位置的信息;鍵盤操作產生的event中會包含與按下的鍵有關的信息。
所有瀏覽器都支持 event 對象,但支持方式不同,在標準 DOM 中 event 對象必須作為唯一的參數傳給事件處理函數,在 IE 中 event 是 window 對象的一個屬性。
成員 | 描述 | 備注 |
type | 觸發的事件名稱 | |
eventPhase | 事件流在傳播階段的位置 | |
target | 觸發事件的元素 | |
srcElement | target 的別名,老版本的 IE 中使用 | |
clientX / clientY | 基于瀏覽器的可視區域,鼠標坐標值 | 可配合固定定位,基于窗口定位 |
pageX / pageY | 基于整個頁面,頁面滾動有關,鼠標在頁面的坐標值 | 可配合絕對定位,基于頁面定位 |
key | 獲取按鍵輸入 | |
preventDefault() | 取消默認行為 | |
stopPropagation() | 阻止事件冒泡 |
const img=document.querySelector('#img');
document.addEventListener('mousemove', function (e) {
// 鼠標位置 - 圖片大小的一半
img.style.left=e.clientX - 96 / 2 + 'px';
img.style.top=e.clientY - 80 / 2 + 'px';
});
設置樣式,讓 body 的高度等于 1500px(垂直方向出現滾動條),滾動條下拉這時候移動鼠標,圖片的縱向位置跟鼠標脫離。
原因是 clientX 和 clientY 獲取的是鼠標在當前可視區域的位置。如果出現滾動條的話可以通過 pageX 和 pageY 獲取鼠標在當前文檔中的位置。
const img=document.querySelector('#img');
document.addEventListener('mousemove', function (e) {
img.style.left=e.pageX - 96 / 2 + 'px';
img.style.top=e.pageY - 80 / 2 + 'px';
});
這里獲取圖片大小的時候寫的是具體值,將來圖片替換后,還需要改變這里的大小。我們可以使用 getComputedStyle() 獲取圖片的大小。
const img=document.querySelector('#img');
img.addEventListener('load', function () {
const style=window.getComputedStyle(img, null);
const imgWidth=parseInt(style.width);
const imgHeight=parseInt(style.height);
document.addEventListener('mousemove', function (e) {
img.style.left=e.pageX - imgWidth / 2 + 'px';
img.style.top=e.pageY - imgHeight / 2 + 'px';
});
});
注意:這里需要在 img 標簽加載完畢后獲取圖片的大小,否則獲取到的圖片大小是 0,因為 load 事件代表圖片被加載,否則的話代碼從上到下執行到這個位置,圖片還沒有被下載回來,這個時候獲取圖片的大小是 0。
#img {
width: 100px;
position: absolute;
left: 0;
top: 0;
}
.toLeft {
transform: rotateY(180deg);
}
const img=document.querySelector('#img');
let x=0;
let y=0;
document.addEventListener('keydown', function (e) {
switch (e.key) {
case 'ArrowLeft':
x -=10;
img.classList.add('toLeft');
break;
case 'ArrowRight':
x +=10;
img.classList.remove('toLeft');
break;
case 'ArrowUp':
y -=10;
break;
case 'ArrowDown':
y +=10;
break;
}
img.style.left=x + 'px';
img.style.top=y + 'px';
});
// contextmenu 鼠標右鍵事件
document.addEventListener('contextmenu', function(e) {
// 禁止點擊的默認行為,即顯示上下文菜單
e.preventDefault()
});
// 禁止選中文字事件
document.addEventListener('selectstart', function(e) {
// 禁止選中文字的默認行為,即不能選中文字
e.preventDefault()
})
const loginBg=document.querySelector('#bg');
const loginLink=document.querySelector('#link');
const loginBox=document.querySelector('#login');
const closeBtn=document.querySelector('#closeBtn');
const loginTitle=document.querySelector('#title');
loginLink.addEventListener('click', function () {
loginBox.style.display='block';
loginBg.style.display='block';
});
closeBtn.addEventListener('click', function () {
loginBox.style.display='none';
loginBg.style.display='none';
});
// 拖動事件的三個過程:鼠標按下 mousedowm,鼠標移動 mousemove,鼠標松開 mouseup
const style=window.getComputedStyle(loginBox, null);
// 模態框跟著鼠標走的原理
loginTitle.addEventListener('mousedown', function (e) {
const loginLeft=parseInt(style.left);
const loginTop=parseInt(style.top);
// 步驟一:當鼠標按下時,需要立即得到鼠標在盒子中的坐標
var x=e.pageX - loginLeft;
var y=e.pageY - loginTop;
// 為整個頁面添加鼠標移動事件
document.addEventListener('mousemove', move);
function move(e) {
// 步驟二:模態框的left和top等于鼠標在頁面的坐標減去鼠標在盒子內的坐標
// 注意:一定要加上px
login.style.left=e.pageX - x + 'px';
login.style.top=e.pageY - y + 'px';
}
// 步驟三:鼠標松開時取消整個頁面的鼠標移動事件
document.addEventListener('mouseup', function (e) {
document.removeEventListener('mousemove', move);
});
});
在這之前我們已經使用過了單擊事件、鼠標經過和鼠標離開的事件,瀏覽器給我們提供的事件種類非常多,下面我們列出一些常用的事件,使用的方式都是一樣的。
描述 | 事件名稱 |
鼠標單擊 | click |
鼠標雙擊 | dblclick |
鼠標移入 | mouseover |
鼠標移出 | mouseout |
鼠標移動 | mousemove |
獲取焦點 | focus |
失去焦點 | blur |
鍵盤按下 | keydown |
鍵盤彈起 | keyup |
不能識別功能鍵 ctrl、alt 等 | keypress |
文本框的輸入事件 | input |
const search=document.querySelector('#search');
function hanldeFocus(e) {
if (e.key==='s') {
search.focus();
e.preventDefault();
}
}
document.addEventListener('keydown', hanldeFocus);
search.addEventListener('focus', function () {
document.removeEventListener('keydown', hanldeFocus);
});
search.addEventListener('blur', function () {
document.addEventListener('keydown', hanldeFocus);
});
輪事件是不同瀏覽器會有一點點區別,一個像Firefox使用DOMMouseScroll ,ff也可以使用addEventListener方法綁定DomMouseScroll事件,其他的瀏覽器滾輪事件使用mousewheel,下面我來給大家具體介紹。
Firefox使用DOMMouseScroll,其他的瀏覽器使用mousewheel。滾動事件觸發時Firefox使用detail屬性捕捉滾輪信息,其他的瀏覽器使用wheelDelta。不知道為何在該問題上其他廠商和微軟的如此一致。Firefox可以使用addEventListener方法綁定DomMouseScroll事件。
elem.addEventListener(‘DOMMouseScroll’, func, false);IE和其他的主流瀏覽器可以使用傳統的事件綁定模型。但不要使用IE專有的attachEvent方法,其他主流瀏覽器并不識別微軟的這個方法。
Firefox 鼠標滾輪向上滾動是-3,向下滾動是3
IE 鼠標滾輪向上滾動是120,向下滾動是-120
Safari 鼠標滾輪向上滾動是360,向下滾動是-360
Opera 鼠標滾輪向上滾動是120,向下滾動是-120
Chrome 鼠標滾輪向上滾動是120,向下滾動是-120
有人在Safari下做了一些測試:”只是滾動一圈的話,值為+-0.1,如果滾動地稍微快點的話(多滾動幾圈),這個值也會變大。 這是因為Mac OS下有鼠標滾輪加速功能。滾動一次,瀏覽器滾動1像素,滾動3次,瀏覽器卻滾動30像素”。同時他也對Camino(基于Gecko的內核引擎)進行研究:“與Safari相似(+- 0.3 to +-Infinity),雖然使用了與firefox相同的內核引擎,但結果這個delta值卻只在+-2.666666里浮動,無論滾動速度如何
IE/Opera屬于同一類型,使用attachEvent即可添加滾輪事件。
/*IE注冊事件*/ if(document.attachEvent){ document.attachEvent('onmousewheel',scrollFunc); }
Firefox使用addEventListener添加滾輪事件
/*Firefox注冊事件*/ if(document.addEventListener){ document.addEventListener('DOMMouseScroll',scrollFunc,false); }
Safari與Chrome屬于同一類型,可使用HTML DOM方式添加事件
window.onmousewheel=document.onmousewheel=scrollFunc;//IE/Opera/Chrome
其中除Firefox外其余均可使用HTML DOM方式添加事件,因此添加事件使用以下方式
/*注冊事件*/ if(document.addEventListener){ document.addEventListener('DOMMouseScroll',scrollFunc,false); }//W3C window.onmousewheel=document.onmousewheel=scrollFunc;//IE/Opera/Chromex
下面兩個參數可以獲取滾動的位置
document.documentElement.scrollTop:垂直方向
document.documentElement.scrollLeft:水平方向
放入監聽事件后就可以在鼠標滑輪滾動時給一些元素設置浮動樣式
如頭條號的發表文章界面:
下滑前
下滑后
*請認真填寫需求信息,我們會在24小時內與您取得聯系。