【前端】01 - JavaScript基礎(1)

1. 編程語言

1.1 編程:

  1. 就是讓計算機為解決某個問題而使用某種程序設計語言編寫程序代碼,并最終得到結果的過程。

1.2 計算機程序:

  1. 就是計算機所執行的一系列的指令集合,而程序全部都是用我們所掌握的語言來編寫的,所以人們要控制計算機一定要通過計算機語言向計算機發出命令。

1.3 計算機語言

  1. 計算機語言指用于人與計算機之間通訊的語言,它是人與計算機之間傳遞信息的媒介。

  2. 計算機語言的種類非常的多,總的來說可以分成機器語言,匯編語言和高級語言三大類。

  3. 實際上計算機最終所執行的都是 機器語言,它是由“0”“1” 組成的二進制數,二進制是計算機語言的基礎。

    機器語言

1.4 編程語言

 編程語言:
    可以通過類似于人類語言的“語言”來控制計算機,讓計算機為我們做事情,這樣的語言就叫做編程語言
(Programming Language)。編程語言是用來控制計算機的一系列指令,它有固定的格式和詞匯(不同編程
語言的格式和詞匯不一樣),必須遵守。如今通用的編程語言有兩種形式:匯編語言和高級語言。
語 言 類 型 說明
匯編語言 匯編語言和機器語言實質是相同的,都是直接對硬件操作,只不過指令采用了英文縮寫的標識符,容易識別和記憶。
高級語言 高級語言主要是相對于低級語言而言,它并不是特指某一種具體的語言,而是包括了很多編程語言,常用的有C 語言、C++JavaC#PythonPHPJavaScriptGo語言、Objective-CSwift 等。
輸出語句

1.5 翻譯器

    高級語言所編制的程序不能直接被計算機識別,必須經過轉換才能被執行,為此,我們需要一個翻譯
翻譯器可以將我們所編寫的源代碼轉換為機器語言,這也被稱為二進制化。
翻譯器

1.6 編程語言和標記語言區別

語言 說明
編程語言 編程語言有很強的邏輯和行為能力。在編程語言里, 你會看到很多if elseforwhile等具有邏輯性和行為能力的指令,這是主動的。
標記語言 標記語言(html)不用于向計算機發出指令,常用于格式化和鏈接。標記語言的存在是用來被讀取的, 他是被動的。

1.7 總結

  1. 計算機可以幫助人類解決某些問題。

  2. 程序員利用編程語言編寫程序發出指令控制計算機來實現這些任務。

  3. 編程語言有機器語言、匯編語言、高級語言。

  4. 高級語言需要一個翻譯器轉換為計算機識別的機器語言。

  5. 編程語言是主動的有很強的邏輯性。

2. 計算機基礎

2.1 計算機組成

計算機
計算機組成

2.2 數據存儲

  1. 計算機內部使用二進制 0 和 1來表示數據。

  2. 所有數據,包括文件、圖片等最終都是以二進制數據(0 和 1)的形式存放在硬盤中的。

  3. 所有程序,包括操作系統,本質都是各種數據,也以二進制數據的形式存放在硬盤中。平時我們所說的安裝軟件,其實就是把程序文件復制到硬盤中。

  4. 硬盤、內存都是保存的二進制數據。

2.3 數據存儲單位

 大小關系:bit < byte < kb < GB < TB<.....
  1. 位(bit): 1bit 可以保存一個 0 或者 1 (最小的存儲單位).
  2. 字節(Byte):1B = 8b .
  3. 千字節(KB):1KB = 1024B .
  4. 兆字節(MB):1MB = 1024KB .
  5. 吉字節(GB): 1GB = 1024MB .
  6. 太字節(TB): 1TB = 1024GB .

2.4 程序運行

程序運行過程
計算機運行軟件的過程:
1. 打開某個程序時,先從硬盤中把程序的代碼加載到內存中
2. CPU執行內存中的代碼
   注意:之所以要內存的一個重要原因,是因為 cpu運行太快了,如果只從硬盤中讀數據,會浪費cpu性能,
所以,才使用存取速度更快的內存來保存運行時的數據。(內存是電,硬盤是機械)

3. 初始 JavaScript

3.1 JavaScript 是什么?

`JavaScript ` 是什么?
  1. JavaScript 是世界上最流行的語言之一,是一種運行在客戶端的腳本語言 (Script 是腳本的意思)。

  2. 腳本語言:不需要編譯,運行過程中由js 解釋器(js 引擎)逐行來進行解釋并執行。

  3. 現在也可以基于Node.js 技術進行服務器端編程。

圖片8.png

3.2 JavaScript 的作用

  1. 表單動態校驗(密碼強度檢測) ( JS 產生最初的目的 )。

  2. 網頁特效。

  3. 服務端開發(Node.js)。

  4. 桌面程序(Electron)。

  5. App(Cordova)

  6. 控制硬件-物聯網(Ruff)。

  7. 游戲開發(cocos2d-js)。

3.3 HTML/CSS/JS 的關系

HTML/CSS/JS 的關系

3.4 瀏覽器執行 JS 簡介

  1. 瀏覽器分成兩部分:渲染引擎和 JS 引擎
渲染引擎和JS引擎
    瀏覽器本身并不會執行JS代碼,而是通過內置 JavaScript 引擎(解釋器) 來執行 JS 代碼 。JS 引擎執行代碼時
逐行解釋每一句源碼(轉換為機器語言),然后由計算機去執行,所以 JavaScript 語言歸為腳本語言,會逐
行解釋執行。
JavaScript引擎
  1. JSV8 引擎。V8在運行之前將JavaScript編譯成了機器代碼,而非字節碼或是解釋執行它,以此提升性能。更進一步,使用了如內聯緩存(inline caching)等方法來提高性能。有了這些功能,JavaScript程序與V8引擎的速度媲美二進制編譯。

3.5 JS 的組成

JS組成

3.5.1 ECMAScript

  1. ECMAScript 是由ECMA 國際( 原歐洲計算機制造商協會)進行標準化的一門編程語言,這種語言在萬維網上應用廣泛,它往往被稱為 JavaScriptJScript ,但實際上后兩者是ECMAScript 語言的實現和擴展。
`ECMAScript ` 是由`ECMA ` 國際( 原歐洲計算機制造商協會)進行標準化的一門編程語言
  1. ECMAScript :規定了 JS 的編程語法和基礎核心知識,是所有瀏覽器廠商共同遵守的一套JS語法工業標準。

3.5.2 DOM - 文檔對象模型

  1. 文檔對象模型(DocumentObject Model,簡稱DOM ,是W3C組織推薦的處理可擴展標記語言的標準編程接口。通過 DOM 提供的接口可以對頁面上的各種元素進行操作(大小、位置、顏色等)。

3.5.3 BOM-瀏覽器對象模型

  1. 瀏覽器對象模型(Browser Object Model,簡稱BOM) 是指瀏覽器對象模型,它提供了獨立于內容的、可以與瀏覽器窗口進行互動的對象結構。通過BOM可以操作瀏覽器窗口,比如彈出框、控制瀏覽器跳轉、獲取分辨率等。

3.6 JS 初體驗

JS 有3種書寫位置,分別為行內、內嵌和外部。

3.6.1 行內式

  <input type="button" value="點我試試" onclick="alert('Hello World')" />
  1. 可以將單行或少量 JS 代碼寫在 HTML 標簽的事件屬性中(以 on 開頭的屬性),如:onclick

  2. 注意單雙引號的使用:在 HTML 中我們推薦使用雙引號, JS 中我們推薦使用單引號。

  3. 可讀性差, 在 html 中編寫 JS 大量代碼時,不方便閱讀。

  4. 引號易錯,引號多層嵌套匹配時,非常容易弄混。

  5. 特殊情況下使用。

3.6.2 內嵌式

<script>
    alert('Hello  World~!');
</script>
  1. 可以將多行JS代碼寫到 script 標簽中。

  2. 內嵌 JS 是學習時常用的方式。

3.6.3 外部 JS 文件

<script src="my.js"></script>
  1. 利于HTML頁面代碼結構化,把大段 JS代碼獨立到 HTML 頁面之外,既美觀,也方便文件級別的復用。

2.引用外部 JS文件的 script 標簽中間不可以寫代碼。

  1. 適合于JS 代碼量比較大的情況。

4. JavaScript 輸入輸出語句

  1. 為了方便信息的輸入輸出,JS 中提供了一些輸入輸出語句,其常用的語句如下:
方法 說明 歸屬
alert(msg) 瀏覽器彈出警示框 瀏覽器
console.log(msg) 瀏覽器控制臺打印輸出信息 瀏覽器
prompt(info) 瀏覽器彈出輸入框,用戶可以輸入 瀏覽器
  1. 注意:alert() 主要用來顯示消息給用戶,console.log() 用來給程序員自己看運行時的消息。

5. 變量

5.1 什么是變量?

  1. 白話:變量就是一個裝東西的盒子。

  2. 通俗:變量是用于存放數據的容器。 我們通過 變量名 獲取數據,甚至數據可以修改。

5.2 變量在內存中的存儲

  1. 本質:變量是程序在內存中申請的一塊用來存放數據的空間。類似我們酒店的房間,一個房間就可以看做是一個變量。
變量在內存中的存儲

5.3 變量命名規范

  1. 由字母(A-Za-z)、數字(0-9)、下劃線(_)、美元符號( $ )組成,如:usrAge, num01, _name

  2. 嚴格區分大小寫。var app ; 和 var App ; 是兩個變量。

  3. 不能 以數字開頭。 18age 是錯誤的。

  4. 不能 是關鍵字、保留字。例如:varforwhile

  5. 變量名必須有意義。 MMD BBD nlage

  6. 遵守駝峰命名法。首字母小寫,后面單詞的首字母需要大寫。myFirstName

5.4 變量的使用

  1. 變量的聲明 。

  2. 變量的賦值 。

5.4.1 聲明變量

//  聲明變量  
var age; //  聲明一個 名稱為age 的變量     
  1. var 是一個 JS 關鍵字,用來聲明變量(variable 變量的意思 )。使用該關鍵字聲明變量后,計算機會自動為變量分配內存空間,不需要程序員管。

  2. age 是程序員定義的變量名,我們要通過變量名來訪問內存中分配的空間。

5.4.2 賦值

age = 10; // 給 age  這個變量賦值為 10        
  1. = 用來把右邊的值賦給左邊的變量空間中 此處代表賦值的意思。

  2. 變量值是程序員保存到變量空間里的值。

5.4.3 變量的初始化

var age  = 18;  // 聲明變量同時賦值為 18
// 聲明一個變量并賦值, 我們稱之為變量的初始化。

5.4.4 變量語法擴展

  1. 更新變量 :一個變量被重新復賦值后,它原有的值就會被覆蓋,變量值將以最后一次賦的值為準。
var age = 18;

age = 81;   // 最后的結果就是81因為18 被覆蓋掉了 
  1. 同時聲明多個變量:同時聲明多個變量時,只需要寫一個 var, 多個變量名之間使用英文逗號隔開。
var age = 10,  name = 'zs', sex = 2;   
  1. 聲明變量特殊情況:
情況 說明 結果
var age ; console.log (age); 只聲明 不賦值 undefined
console.log(age) 不聲明 不賦值 直接使用 報錯
age = 10; console.log (age); 不聲明 只賦值 10

6. 數據類型

6.1 數據類型簡介

6.1.1 為什么需要數據類型

  1. 在計算機中,不同的數據所需占用的存儲空間是不同的,為了便于把數據分成所需內存大小不同的數據,充分利用存儲空間,于是定義了不同的數據類型。

  2. 簡單來說,數據類型就是數據的類別型號。比如姓名“張三”,年齡18,這些數據的類型是不一樣的。

6.1.2 變量的數據類型

  1. 變量是用來存儲值的所在處,它們有名字和數據類型。變量的數據類型決定了如何將代表這些值的位存儲到計算機的內存中。JavaScript 是一種弱類型或者說動態語言。這意味著不用提前聲明變量的類型,在程序運行過程中,類型會被自動確定。
  var age = 10;        // 這是一個數字型
  var areYouOk = '是的';   // 這是一個字符串   
  1. 在代碼運行時,變量的數據類型是由 JS引擎 根據 = 右邊變量值的數據類型來判斷 的,運行完畢之后, 變量就確定了數據類型。JavaScript 擁有動態類型,同時也意味著相同的變量可用作不同的類型:
  var x = 6;           // x 為數字
  var x = "Bill";      // x 為字符串    

6.2 數據類型的分類

  1. 簡單數據類型 和 復雜數據類型;

6.2.1 簡單數據類型 (Number ,String , Boolean ,Undefined , Null

  1. JavaScript 中的簡單數據類型及其說明如下:
    JavaScript中的簡單數據類型
數字型 Number : JavaScript 數字類型既可以保存整數,也可以保存小數(浮點數)。
var age = 21;       // 整數
var Age = 21.3747;  // 小數   
  1. 數字型進制 :最常見的進制有二進制、八進制、十進制、十六進制。
  // 1.八進制數字序列范圍:0~7
 var num1 = 07;   // 對應十進制的7
 var num2 = 019;  // 對應十進制的19
 var num3 = 08;   // 對應十進制的8
  // 2.十六進制數字序列范圍:0~9以及A~F
 var num = 0xA;  
  1. 現階段我們只需要記住,在 JS 中八進制前面加 0 ,十六進制前面加 0x

  2. 數字型范圍:JavaScript 中數值的最大和最小值

最大值:Number.MAX_VALUE ,這個值為: 1.7976931348623157e+308
最小值:Number.MIN_VALUE ,這個值為:5e-32

  1. 數字型三個特殊值:
  • Infinity ,代表無窮大,大于任何數值。

  • Infinity ,代表無窮小,小于任何數值。

  • NaN ,Not a number ,代表一個非數值。

  1. isNaN
  • 用來判斷一個變量是否為非數字的類型,返回 true 或者 false
isNaN
 <script>
    // isNaN() 這個方法是用來判斷非數字 ,并且返回一個值
    console.log(isNaN(2)); // 是非數字嗎? false
    console.log(isNaN('xxx')); // 是非數字嗎? true
  </script>
字符串型 String 字符串型可以是引號中的任意文本,其語法為 雙引號 "" 和 單引號''。
var strMsg = "我愛北京天安門~";  // 使用雙引號表示字符串
var strMsg2 = '我愛吃豬蹄~';    // 使用單引號表示字符串
// 常見錯誤
var strMsg3 = 我愛大肘子;       // 報錯,沒使用引號,會被認為是js代碼,但js沒有這些語法
  1. 因為 HTML 標簽里面的屬性使用的是雙引號,JS 這里我們更推薦使用單引號。

  2. 字符串引號嵌套: JS 可以用單引號嵌套雙引號 ,或者用雙引號嵌套單引號 (外雙內單,外單內雙)

  3. 字符串轉義符,類似HTML里面的特殊字符,字符串中也有特殊字符,我們稱之為轉義符。轉義符都是 \ 開頭的,常用的轉義符及其說明如下:

轉義符 解釋說明
\n 換行符,n 是 newline 的意思
\ \ 斜杠 \
' ' 單引號
" ”雙引號
\t tab 縮進
\b 空格 ,b 是 blank 的意思
  1. 字符串長度:字符串是由若干字符組成的,這些字符的數量就是字符串的長度。通過字符串的length 屬性可以獲取整個字符串的長度。
   <script>
      var str = '12 34 56 78 9';
      console.log(str.length);
  </script>
  1. 字符串拼接: 多個字符串之間可以使用 + 進行拼接,其拼接方式為 字符串 + 任何類型 = 拼接之后的新字符串,拼接前會把與字符串相加的任何類型轉成字符串,再拼接成一個新的字符串。
//1.1 字符串 "相加"
alert('hello' + ' ' + 'world'); // hello world
//1.2 數值字符串 "相加"
alert('100' + '100'); // 100100
//1.3 數值字符串 + 數值
alert('11' + 12);     // 1112 
  • + 號總結口訣:數值相加 ,字符相連
  1. 字符串拼接加強
console.log('pink老師' + 18);        // 只要有字符就會相連 
var age = 18;
console.log('pink老師age歲啦');      // 這樣不行哦
console.log('pink老師' + age);         // pink老師18
console.log('pink老師' + age + '歲啦'); // pink老師18歲啦
  • 經常會將字符串和變量來拼接,變量可以很方便地修改里面的值
  • 變量是不能添加引號的,因為加引號的變量會變成字符串
  • 如果變量兩側都有字符串拼接,口訣“引引加加 ”,刪掉數字,變量寫加中間
布爾型 Boolean
  1. 布爾類型有兩個值:truefalse ,其中 true 表示真(對),而 false 表示假(錯)。

  2. 布爾型和數字型相加的時候, true 的值為 1 ,false 的值為0

console.log(true + 1);  // 2
console.log(false + 1); // 1
UndefinedNull
  1. 一個聲明后沒有被賦值的變量會有一個默認值undefined ( 如果進行相連或者相加時,注意結果)
ar variable;
console.log(variable);           // undefined
console.log('你好' + variable);  // 你好undefined
console.log(11 + variable);     // NaN
console.log(true + variable);   //  NaN
  1. 一個聲明變量給 null 值,里面存的值為空(學習對象時,我們繼續研究null)
var vari = null;
console.log('你好' + vari);  // 你好null
console.log(11 + vari);     // 11
console.log(true + vari);   //  1

6.2.2 復雜數據類型 ( object )

6.2.3 簡單數據類型 Boolean

1.Boolean類型true1 false0

<script>
  // Boolean 類型是 true = 1 和 false = 0
  var b = true; // 1
  var f = false; // 0
  console.log(b + 1); // 2
  console.log(f + 1); // 1
</script>

6.2.4 簡單數據類型Undefine

  1. 如果一個變量聲明后未給值,就是Undefined

  2. 獲取直接聲明一個變量 , 賦值為 Undefined

  3. Undefinde和 數字相加最后的結果是 NaN

6.2.5 簡單數據類型 NULL

<script>
  var a;
  console.log(a); // 只聲明未賦值,輸出是 undefined
  // 字符串和 undefined 相加
  console.log('str' + a); // strundefine
  // 數字和 undefined 相加
  console.log(11 + a); // NaN
  // 一個聲明的變量給 null 值里面是一個空值
  var vari = null;
  // 字符串和 null 相加
  console.log('str' + vari);
  // 數字和null相加
  console.log(11 + vari);
  // Boolean和null相加
  console.log(vari + true);
</script>

6.3 獲取變量數據類型

  1. 獲取檢測變量的數據類型。typeof 可用來獲取檢測變量的數據類型。
 <script>
    var num = 10;
    var str = 'string';
    var flag = true;
    var unVar = undefined
    var timer = null;
    console.log(typeof num);
    console.log(typeof str);
    console.log(typeof flag);
    console.log(typeof unVar);
    console.log(typeof timer); // object
  </script>
圖片16.png
  1. 字面量 : 字面量是在源代碼中一個固定值的表示法,通俗來說,就是字面量表示如何表達這個值。
  • 數字字面量:8, 9, 10

  • 字符串字面量:'黑馬程序員', "大前端"

  • 布爾字面量:truefalse

6.4 數據類型轉換

6.4.1 什么是數據類型轉換?

  1. 使用表單、prompt 獲取過來的數據默認是字符串類型的,此時就不能直接簡單的進行加法運算,而需要轉換變量的數據類型。通俗來說,就是把一種數據類型的變量轉換成另一種數據類型,通常會實現3種方式的轉換:
  • 轉換為字符串類型。
  • 轉換為數字型。
  • 轉換為布爾型。
轉換為字符串類型
轉換為字符串類型的三種方式
  1. 使用 toString進行轉換 :
<script>
  var num = 10;
  var str = num.toString();
  console.log(str, typeof str);
</script>
  1. 使用String(args)方法進行轉換:
<script>
  var num = 10;
  var str = String(num);
  console.log(str);
  console.log(typeof str);
</script>
  1. 使用加字符串的方式:
<script>
  var num = 12;
  var str = 12 + '';
  console.log(str);
  console.log(typeof str)
</script>
轉換為數字型(重點)
轉換為數字型
  1. 使用parseInt() 轉換為數字類型:
<script>
  var age = prompt("請輸入您的年齡");
  console.log(age); // '12'
  console.log(parseInt(age)); // 12
  console.log(parseInt('3.14')); // 3 向下取整
  console.log(parseInt('9.94')); // 9 向下取整
  console.log(parseInt('120px')); // 120
  console.log(parseInt('rem120px')); // NaN Not a Number
</script>
  1. 使用 parseFloat() 轉換:
<script>
  var value = prompt("請輸入單價:");
  console.log(value);
  console.log(parseFloat(value)); // 12.3
  console.log(parseFloat('3.14')); // 3.14
  console.log(parseFloat('9.94')); // 9.94
  console.log(parseFloat('120px')); // 120
  console.log(parseFloat('rem120px')); // NaN
</script>
  1. 使用Number()函數進行轉換:
<script>
  var value = prompt("請輸入單價:");
  console.log(value);
  console.log(Number(value)); // 12.3
  console.log(Number('3.14')); // 3.14
  console.log(Number('9.94')); // 9.94
  console.log(Number('120px')); // 120
  console.log(Number('rem120px')); // NaN
</script>
  1. 使用運算符 - * /進行轉換:
<script>
  /* 1. 使用減法 */
  var str = '123';
  var less = str - 0;
  console.log(less);
  console.log(typeof less);
  console.log(typeof ('123' - '121'),('123' - '121'));

  /* 2. 使用乘法  */
  var multiply = str * 1;
  console.log(multiply);
  console.log(typeof multiply);

  /* 3. 使用除法 */
  var except = str / 1;
  console.log(except);
  console.log(typeof except);
</script>
  1. 注意parseIntparseFloat單詞的大小寫,這2個是重點。

  2. 隱式轉換是我們在進行算數運算的時候,JS 自動轉換了數據類型

6.4.2 轉換為布爾類型

  1. 代表空、否定的值會被轉換為false,如'',0NaNnullundefined

  2. 其余值都會被轉換為 true

7. 解釋型語言和編譯型語言

7.1 概述

計算機不能直接理解任何除機器語言以外的語言,所以必須要把程序員所寫的程序語言翻譯成機器語言才能執行程序。程序語言翻譯成機器語言的工具,被稱為翻譯器。

編譯器

7.2 執行過程

執行過程
類似于請客吃飯:

    編譯語言:首先把所有菜做好,才能上桌吃飯

    解釋語言:好比吃火鍋,邊吃邊涮,同時進行

8. 關鍵字和保留字

8.1 標識符

標識(zhi)符:就是指開發人員為變量、屬性、函數、參數取的名字。

標識符不能是關鍵字或保留字。

8.2 關鍵字

關鍵字:是指 JS本身已經使用了的字,不能再用它們充當變量名、方法名。

包括:break、case、catch、continue、default、delete、do、else、finally、for、function、if、in、instanceof、new、return、switch、this、throw、try、typeof、var、void、while、with 等。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,234評論 2 375

推薦閱讀更多精彩內容