06 js01 數(shù)據(jù)類型、運(yùn)算符、類型轉(zhuǎn)換

W3C標(biāo)準(zhǔn)規(guī)定:結(jié)構(gòu)、樣式、行為相分離,html負(fù)責(zé)結(jié)構(gòu)、css負(fù)責(zé)樣式、javascript負(fù)責(zé)行為;其可以動(dòng)態(tài)的操作html結(jié)構(gòu),增刪改查(樣式的變化、邏輯行為的變化等)

關(guān)于javascript,我們還是要了解一些其的發(fā)展歷程;

NCSA Mosaic,或簡(jiǎn)稱Mosaic,是互聯(lián)網(wǎng)歷史上第一個(gè)獲普遍使用和能夠顯示圖片網(wǎng)頁瀏覽器,后來網(wǎng)景導(dǎo)航者瀏覽器的開發(fā)工作,聘用了許多原有的Mosaic瀏覽器工程師,但是沒有采用Mosaic網(wǎng)頁瀏覽器的任何代碼。傳承網(wǎng)景瀏覽器代碼的后裔為Firefox瀏覽器。】

1、javascript的歷程:1995年,網(wǎng)景公司(Netscape)正憑借Navigator瀏覽器成為Web時(shí)代很矚目的互聯(lián)網(wǎng)公司,當(dāng)時(shí)的網(wǎng)頁還皆是靜態(tài),網(wǎng)景公司希望可以在靜態(tài)網(wǎng)頁中添加一些動(dòng)態(tài)效果,于是公司內(nèi)部一哥們兩周左右的時(shí)間設(shè)計(jì)出了javascript語言,其與Java語言沒什么必然的聯(lián)系(因?yàn)镹etscape與Sun合作,Netscape管理層希望它外觀看起來像Java,同時(shí)也希望借Java進(jìn)行市場(chǎng)宣傳,因此取名為JavaScript)一年后Microsoft開發(fā)出了JScript,微軟強(qiáng)大的桌面系統(tǒng)最終干掉了網(wǎng)景公司,幾個(gè)公司聯(lián)合ECMA組織定制了javascript語言的標(biāo)準(zhǔn),被稱為ECMAScript,現(xiàn)在所提到的Javascript的標(biāo)準(zhǔn)就是ECMAScript標(biāo)準(zhǔn);

【網(wǎng)景公司最終被收購,其的失敗很大程度上是微軟IE瀏覽器造成的。微軟采取操作系統(tǒng)捆綁IE瀏覽器策略,firefox(開放源碼)傳承,gecko內(nèi)核,也是五大主流瀏覽器之一;】

Javascript語言依舊有一些設(shè)計(jì)缺陷;而對(duì)于瀏覽器而言,瀏覽器發(fā)布時(shí)候就確定了Javascript的版本,目前面臨的是處理兼容問題,很多用戶依舊在使用ie6這種很老的瀏覽器,盡量兼容到ie8;

。。。。。。過多也不做闡述了,接下來更多去回歸到這門語言的本身~ ~ ~

2、Javascript是一種弱類型(動(dòng)態(tài))、多范式的解釋性腳本語言;

同時(shí)還有三大特性:解釋性,單線程,ECMA標(biāo)準(zhǔn);

同步、異步的區(qū)別:計(jì)算機(jī)中的概念與生活中的概念正好相反,計(jì)算機(jī)中所謂同步:不同時(shí)進(jìn)行,異步:同時(shí)進(jìn)行,例如在瀏覽器渲染網(wǎng)頁的過程中,加載html結(jié)構(gòu)的同時(shí),css文件和js文件同時(shí)進(jìn)行加載;(加載即為下載)

單線程:同一時(shí)間內(nèi)只做一件事,在javascript中同一時(shí)間可以實(shí)現(xiàn)多個(gè)效果的展示,涉及到j(luò)s執(zhí)行隊(duì)列問題,js執(zhí)行時(shí)候采用“輪轉(zhuǎn)時(shí)間片”的方法進(jìn)行,不同效果之間進(jìn)行快速切換;(輪轉(zhuǎn)時(shí)間片類似于“吃飯問題”)

ECMA標(biāo)準(zhǔn):嚴(yán)格按照此標(biāo)準(zhǔn)執(zhí)行,目前是ECMAScript 6標(biāo)準(zhǔn)(簡(jiǎn)稱ES6){2015年6月正式發(fā)布了}談到j(luò)avascript的版本,指代的即為ECMA標(biāo)準(zhǔn);

Javascript嚴(yán)格區(qū)分大小寫,

編程語言

3、javascript分為三部分:ECMAScript(原生js)、DOM、BOM;接下來先學(xué)習(xí)ECMAScript;


ECMAScript內(nèi)容:

1、引入js:頁面級(jí)(head內(nèi)、body內(nèi)、body外)和外聯(lián)式, 不可以既使用頁面級(jí),也使用外聯(lián)式(如果混合使用,外聯(lián)式起作用,切不要混合使用);<script type="text/javascript" src=""></script>

2、js變量用var來聲明,變量聲明規(guī)則:(1).變量由字母、數(shù)字、下劃線、$構(gòu)成,首字母不能是數(shù)字;(2).關(guān)鍵字、保留字不能作為變量名(所謂保留字:如今雖然不是關(guān)鍵字,之后有可能成為關(guān)鍵字);(3).變量名遵循小駝峰規(guī)則;

【定義變量=變量聲明+變量初始化(賦值)var a; //變量聲明? ? a = 10; //變量初始化? ?var a=10; //定義變量 】

3、數(shù)據(jù)類型:(先對(duì)其有個(gè)基礎(chǔ)認(rèn)知)

原始值:Number ?String ?Boolean ?undefined ?null;

引用值:數(shù)組、對(duì)象、function? (date RegExp Math等等js有很多引用值);

原始值存放于棧區(qū)(stack),其是不可改變的值(定義后值便不可以改變),變量賦值的時(shí)候要注意,后期有很多應(yīng)用場(chǎng)景,字符串拼接時(shí)也有用到;[stack:?后進(jìn)先出]? ? var a = 6; var b = a; a = 10; console.log(b);//6;? a=10;的時(shí)候由于原始值定義后不可改變,其會(huì)新開辟空間,將原來的空間抹掉(名字抹掉,內(nèi)存空間二次覆蓋才會(huì)消失) ,a,b互不影響,壓根內(nèi)存就沒什么聯(lián)系;

引用值內(nèi)容存放于堆區(qū),地址存放于棧區(qū),地址指向堆區(qū),地址相同指向同一塊內(nèi)存空間;[heap:?先進(jìn)后出]

var?arr = [1,2];? ?var arr1 = arr;? arr.push(3); console.log(arr1);//[1,2,3]? 方法添加直接添加到數(shù)組中了【補(bǔ)充:聚焦點(diǎn)在方法添加元素,后續(xù)學(xué)到push()方法,其是會(huì)改變?cè)瓟?shù)組,內(nèi)部還有更深入的機(jī)制】

var arr = [1,2];? var arr1 = arr; arr = [1,3];console.log(arr1);//[1,2]? 相當(dāng)于是新開辟了一塊內(nèi)存空間,一個(gè)數(shù)組名只能對(duì)應(yīng)一個(gè)地址,一個(gè)地址只能指向一塊空間,該地址指向了新存儲(chǔ)空間;

(1).Number:數(shù)字類型(不區(qū)分整型和浮點(diǎn)型,統(tǒng)一用Number表示,其他語言數(shù)字類型是整型,js中是浮點(diǎn)型) [用到的數(shù)字都是Number類型,infinity(1/0), -infinity(-1/0)? NaN(0/0)],? [數(shù)學(xué)規(guī)則運(yùn)算]

(2).String?: 單引號(hào)、多引號(hào)括起來的任意文本;

(3).Boolean:true?、false;

(4).undefined: 未定義(聲明變量但未賦值); not a defined(壓根就沒有聲明);

(5).null: 空(大多數(shù)情況表示占位符)

(6). var arr = [1,2,3,4,5,6,false,true,{},[]]; (弱類型語言的好處,同一數(shù)組中的數(shù)組元素可以是不同數(shù)據(jù)類型,強(qiáng)類型語言確定數(shù)據(jù)類型后數(shù)組元素的類型也就確定了,后續(xù)前后端數(shù)據(jù)傳輸中更為便捷)

4、運(yùn)算符:最終得到的都是結(jié)果,布爾值或者數(shù)值;

(1).算術(shù)運(yùn)算符:最基本都是從左到右運(yùn)行;?+?- * /? %??++ -- ;

1/0: Infinity?? Number;? 正無窮大

-1/0: -Infinity?? Number;? 負(fù)無窮大

0/0:?? NaN?? Not a Number ,當(dāng)無法計(jì)算結(jié)果時(shí)用NaN

(2).比較運(yùn)算符: > < >= <= == != (=== !==)? 比較的目的是判斷對(duì)錯(cuò),結(jié)果為布爾值;

? ? ?[1].console.log(3>2);//true; console.log(3>"4");//false?隱式轉(zhuǎn)換為number類型比較;

? ? ?[2].若是字符串,則是逐位ASCII碼進(jìn)行比較,console.log("1">"2");//false; console.log("10">"2")//false;?字符串一零和字符串2比較,顯然1的ASCII碼小于2的ASCII;[ASCII碼表表示的是7位二進(jìn)制數(shù)的大小0000000,也就是128個(gè),主要解決的是一些字符需要轉(zhuǎn)換為二進(jìn)制編碼,常用的便是A:65,a:97,0:48; ASCII碼擴(kuò)展表表示8位二進(jìn)制的大小00000000,0~255個(gè),unicode編碼(萬國(guó)碼),為每一種語言的每一個(gè)字符都設(shè)定了統(tǒng)一的唯一的二進(jìn)制碼,16位二進(jìn)制的大小,65525個(gè),范圍幾乎囊括所有字符,應(yīng)該沒有甲骨文等古文字];

? ? ?[3]."=="?隱式轉(zhuǎn)換為Number()判斷,===?絕對(duì)等于,以上所談皆是針對(duì)原始值,若是引用值則不同,創(chuàng)建的每一個(gè)引用值都有獨(dú)自的地址指向自己的存儲(chǔ)空間; 【===?原始值中每個(gè)數(shù)都會(huì)恒等,引用值和NaN除外】

1 == "1" //true;? ? 1==="1" //false;

undefined == null;? //true;?控制臺(tái)中測(cè)試發(fā)現(xiàn)undefined>0,false; undefined<0,false; undefined=0,false; null>0,false; null<0,false; null=0,false;?但測(cè)試發(fā)生undefined==null;但undefined === null;//false? 絕對(duì)不相等;

{}=={};//false; {}==={}//false;? []==[]//false; []===[]//false;?引用值比較時(shí)內(nèi)存空間不同;

NaN? == NaN;? ?NaN === NaN; //?都為false,NaN和誰都不相等,唯一能判斷NaN的方法isNaN(NaN);//true;

parseInt('1a')==1; //true;

絕對(duì)等于 ===? 絕對(duì)不等于!==? ? 兩者的長(zhǎng)度都為3

(3).邏輯運(yùn)算符: && || !?? 用處極大,常用在語句判斷中,輸出的結(jié)果為值;

? ? 【undefined ,? null,? NaN, ""? 0 , false? 六個(gè)值的布爾值都為false,其余都是true】;

? ? ? [1]&&運(yùn)算符:?先判斷第一個(gè)表達(dá)式轉(zhuǎn)換為布爾值的結(jié)果,若結(jié)果為真,就直接輸出第二個(gè)值,若第一個(gè)表達(dá)式的布爾值為false,則輸出第一個(gè)值;【輸出的是值,而非true/false,true/false只是判斷是否繼續(xù)進(jìn)行判斷】同理三個(gè)/n個(gè)表達(dá)式都是如此判斷;2 &&?false && 0 ;//false;?

? ? ? [2].||運(yùn)算符:? 先判斷第一個(gè)表達(dá)式轉(zhuǎn)換為布爾值的結(jié)果,若為真就返回該值,若為假就繼續(xù)判斷,若是兩個(gè)數(shù)布爾值都為false,則返回最后一個(gè)值(終究還是要返回一個(gè)值);同理三個(gè)/n個(gè)表達(dá)式都是如此判斷; 0 || false; //false;? ?0 || false || 1;//1;

補(bǔ)充:【&&中的“全真即為真,一假即為假”,這種現(xiàn)象是根據(jù)最后輸出值的布爾值得出的,底層判斷的邏輯就是上述,后續(xù)if語句中的條件判斷中也遵循上述,但沒必要那么判斷,直接理解成并且即可,||理解為或者即可,其他情況還遵循上述更易于理解;】【無論是字符串、數(shù)字、還是比較表達(dá)式、函數(shù)、語句都可以看作是一個(gè)表達(dá)式】

【使用場(chǎng)景很廣泛: &&運(yùn)算符有短路語句的作用,2>1&& document.wirte("a");若是前面語句成立,才執(zhí)行后面語句;后端往前端傳入數(shù)據(jù)時(shí)使用其進(jìn)行判斷 data && fn(data);?若是data?是空的或者undefined,則不執(zhí)行后面的語句,類似于if判斷;||運(yùn)算符:處理兼容性很靈活,div.onclick = function(e){ var event = e|| window.event; ?} 】

? ? ? ?[3]. !運(yùn)算符 :先轉(zhuǎn)化為布爾值再取反;var a = !123; /false;? var a = ! !"";//false;

? ? ? ?& |? 與運(yùn)算或運(yùn)算,短路與短路或,二進(jìn)制進(jìn)行計(jì)算,在實(shí)際開發(fā)中幾乎不用;

(4).賦值運(yùn)算符:= ??+=??-=? *=??/= ? %=

(5).條件運(yùn)算符(三目):變量=條件?值1:值2;

(6).位運(yùn)算符:&、| ?、~ 、^(異或) ?<< 左移 ? ?>> 右移

5、語句:

(1).if 語句:if語句和switch語句要靈活使用,后者可以靈活規(guī)避掉一些“耦合”問題;【if條件判斷聚焦點(diǎn)是true/false,來確定是否執(zhí)行后面的語句】

使用90<score<100這種方式進(jìn)行判斷會(huì)漏掉后面的條件,true<100

條件語句補(bǔ)充: switch語句,break,continue的使用;【break/continue都是關(guān)鍵字,break終止循環(huán),其必須寫在循環(huán)語句中,即使是嵌套的語句也OK,單獨(dú)寫在其他語句中會(huì)報(bào)錯(cuò)】

while(1){i++; console.log(i); if(i > 100){ break;}}?不會(huì)報(bào)錯(cuò);下面直接寫在非循環(huán)語句中會(huì)報(bào)錯(cuò);

break的錯(cuò)誤用法

(2).循環(huán)語句:for循環(huán) for(var i=0; i<10; i++){}.弄清楚其的執(zhí)行順序后,括號(hào)內(nèi)的語句第一句可以放到循環(huán)體外,第三句可以放在執(zhí)行體內(nèi),所以括號(hào)內(nèi)可省略;

while循環(huán):底層機(jī)制就是for循環(huán),括號(hào)內(nèi)無前后語句,只有中間的語句; do while循環(huán),計(jì)算開發(fā)中幾乎不使用;

6、typeof()方法,返回?cái)?shù)據(jù)類型,可以返回6個(gè)值,number string boolean? undefined object function; ?基本上引用值都返回object對(duì)象, var num = {} ,空對(duì)象, var? num?= null,最早是代替空對(duì)象占位的(不等同于空對(duì)象),雖然是原始值,但返回依舊是object,有歷史遺留問題;

(1). typeof ()返回的格式就是字符串“”;雙引號(hào)內(nèi)顯示具體返回的類型;(可都是小寫)

(2).typeof()方法 ,也可以寫成是typeof ?abc,(不加括號(hào),直接加空格);

(3).typeof(a);// 變量a沒有聲明但不會(huì)報(bào)錯(cuò),結(jié)果為“undefined”, 字符串,【唯一一個(gè)未聲明不報(bào)錯(cuò)】

延生:typeof(typeof(a)); //"string"? 未經(jīng)聲明不會(huì)報(bào)錯(cuò),返回字符串"undefined",typeof("undefined");

typeof(NaN);//"number"? ? typeof(null):// "object"? ? typeof(undefined)://"undefined"

typeof(1 =="1");//"boolean"? ?typeof(NaN == NaN);// "boolean"? 【其只能返回6個(gè)字符串值,細(xì)心】

7、類型轉(zhuǎn)換:聚焦點(diǎn)是原始值之間的類型轉(zhuǎn)換;

(1).顯示類型轉(zhuǎn)換:

[1].Number();?轉(zhuǎn)換為數(shù)字,Number(null);// 0? Number(undefined);//NaN? Number("a");//NaN,看著能轉(zhuǎn)換為數(shù)字的才轉(zhuǎn)換,Number("123abc");//NaN;? 并沒有砍斷原則;

[2].parseInt();轉(zhuǎn)換為整型數(shù)字,parseInt(123.6);//沒有四舍五入取整數(shù)部分即可;?其的作用主要是解析字符串的,parseInt(123.6abc);//NaN;? parseInt(string,radix);//?首個(gè)參數(shù)必填,第二個(gè)為進(jìn)制,選填,基低為2~36,此數(shù)據(jù)就是以該基低為進(jìn)制的數(shù),轉(zhuǎn)換為10進(jìn)制;小于2/大于36,返回NaN;[常見使用場(chǎng)景:parseInt("100px");//100;?砍斷原則針對(duì)的是字符串]

[3].parseFloat(); parseFloat("123.92abc");//123.92??

[4].Boolean();? 轉(zhuǎn)換為布爾值,布爾值只有true/false;?所謂的0/1只是計(jì)算機(jī)二進(jìn)制的表示(元器件的開關(guān))或者布爾值轉(zhuǎn)為數(shù)字類型,不要混淆;

[5].String();?轉(zhuǎn)換為字符串,toString();方法的使用也可以轉(zhuǎn)換為字符串[打點(diǎn)方式調(diào)用,后續(xù)會(huì)講到,該方法是Object根對(duì)象的方法,所有對(duì)象都有該方法,undefined和null不是對(duì)象,其沒有此方法],toStirng(radix);?把10進(jìn)制的數(shù)轉(zhuǎn)換為該參數(shù)進(jìn)制;【除上述兩種方法可轉(zhuǎn)換為字符串,還可以使用+"";?任何數(shù)與空串拼接都會(huì)隱式轉(zhuǎn)換為字符串類型】

(2).隱式類型轉(zhuǎn)換:其內(nèi)部都是調(diào)用的顯示類型轉(zhuǎn)換方法;

[1].isNaN();?此方法判斷傳入的數(shù)據(jù)是否為NaN,結(jié)果為布爾值;隱式先調(diào)用Number();再判斷;console.log(isNaN('abc'))//true;console.log(isNaN(null));//false;console.log(isNaN(undefined));//true

[2].++/--、+/-(正/負(fù))、減乘除求余:隱式調(diào)用Number();進(jìn)行轉(zhuǎn)換;

[3].+?連接符 :隱式調(diào)用String();?只要連接符有字符串,其會(huì)將所有的數(shù)都轉(zhuǎn)換為字符串來進(jìn)行拼接

[4].&& || ! :? 隱式調(diào)用Boolean();

[5]. > <? >= <= :?比較運(yùn)算符隱式轉(zhuǎn)換為Number();?結(jié)合比較運(yùn)算符的規(guī)則,"3">"2"兩個(gè)都是字符串逐位比較ASCII碼;

(3).不發(fā)生類型轉(zhuǎn)換:?=== !==;絕對(duì)等于,絕對(duì)不等于;【NaN是特殊,注意引用值】

(4).特性無規(guī)則,系統(tǒng)定義的:undefined == null;? //true;?控制臺(tái)中測(cè)試發(fā)現(xiàn)undefined>0,false; undefined<0,false; undefined=0,false; null>0,false; null<0,false; null=0,false;?但測(cè)試發(fā)生undefined==null;但undefined === null;//false? 絕對(duì)不相等;

8、toFixed(num);//小數(shù)點(diǎn)后保留num位數(shù)字(四舍五入)? num范圍0~20,不寫默認(rèn)為0;?var? numv = 123.6788;? numv.toFixed();//124;? numv.toFixed(3); //123.679;


補(bǔ)充:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評(píng)論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,530評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,407評(píng)論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,759評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,204評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,415評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,955評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,782評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,222評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評(píng)論 1 286
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,675評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,967評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容