JavaScript 基础知识总结(一)

JavaScript

JavaScript 简介

1. 前端技术的三大核心

HTML、CSS 和 JavaScript。HTML 控制着网页的结构,CSS 控制网页的外观,JavaScript 控制着网页的行为。

2. 常见的问题

  • JavaScript 与 Java 有什么关系?
  • 虽然名字相似,但是本质上是不同的
  • JavaScript 常常在网页中使用,而 Java 可以在软件、网页、手机 APP 等各个领域使用。
  • 从本质上讲,Java 是一门面向对象的语言,而 JavaScript 更像是一门函数式编程语言。
  • 静态网页和动态网页的区别
  • 是否与服务器进行数据交互(是否用到后端技术 如PHP、JSP、ASP.NET)。
  • 并不是会动的页面就是动态页面
  • 学习 JavaScript 好的建议
  • 学完 JavaScript 基础知识,不要急于去学习 JavaScript 高级知识,而是应该学习 jQuery ,通过它可以让我们对 JavaScript 有更深层次的理解。等学完 jQuery 再去学习 JavaScript 的高级内容
  • 对于初学者,不必要搞清楚每一个细节,遇到实在不懂的地方,直接跳过,等到学习的更深入的时候,自然就理解了。

JavaScript 引入方式

1. 外部 JavaScript

  • 指的是把 HTML 和 JavaScript 代码分别放在不同的文件中
  • 引入方式:使用 script 标签的 src 属性指向 javaScript 文件的文件路径。
  • 外部 JavaScript 文件不仅可以放在 head 中引入,还可以在 body 标签中引入。但考虑到网站的加载速度和代码的执行顺序,一般将 JavaScript 外部文件放在 body 标签的 </body> 前。

2. 内部 JavaScript

  • 指的是把 HTML 和 JavaScript 代码放在同一个文件中
  • 引入方式:将 JavaScript 代码放在 <script></script> 标签中。
  • 内部 JavaScript 文件不仅可以在 head 中引入,还可以在 body 中引入。一般情况下在 head 中引入

3. 元素事件中调用 JavaScript

  • 值的是在元素的事件属性中直接编写 JavaScript 或调用函数。
  • 这里的 事件 作为元素的属性

JavaScript 基本语法

1. 语法简介

学习任何一门语言都得学习这门语言的词汇、语法和结构等。同样学习一门编程语言,也需要学习类似的东西。只不过,这些在编程语言里不叫词汇、语法、结构,而是变量、表达式、运算符等。

2. 变量

变量:在JavaScript 中即可以改变的量。也就是说在程序执行的过程中,变量的值是可以改变的。

变量的命名原则

  • 变量由字母、下划线、$或数字组成,并且第一个字母必须是字母、下划线或者$
  • 变量不能是系统关键字和保留字。
  • 系统的关键字指 JavaScript 本身已经使用的名字。
  • 保留字指 JavaScript 本身还没有使用的名字,虽然没有使用,但是它们有可能在将来会被使用。

变量的声明

  • 在 ES5 中,变量使用 var 来声明

变量的赋值

  • 变量可以先声明后赋值,比如 var a;a = 10;
  • 变量可以直接赋值,比如 var a = 10;
  • 一个 var 也可以同时声明多个变量名,其中变量名之间必须用英文逗号隔开,比如 var a = 10 , b = 30 , c = 50;

3. 常量

指的是:一个不能改变的值,生命周期是从一个程序开始到一个程序结束。一般情况下,常量名全部大写,比如 var ADD = 1;

4. 数据类型

类型识别
  • typeof 操作符返回一个字符串

    • 可以识别基本数据类型(Null 除外,Null 类型返回 “object”)
    • 不能识别具体的对象(object)类型(function除外)
    • 语法
      typeof operand
      operand 是一个表达式,表示对象或原始值,其类型将被返回。
    • 示例
                    //Numbers
                    typeof 37 === 'number';
                    typeof 3.14 === 'number';
                    typeof Math.LN2 === 'number';
                    typeof Infinity === 'number';
                    typeof NaN === 'number'; // 尽管NaN是"Not-A-Number"的缩写
                   
                   // Strings
                   typeof "" === 'string';
                   typeof "bla" === 'string';
                   typeof (typeof 1) === 'string'; // typeof总是返回一个字符串
                   typeof String("abc") === 'string'; // 但不要使用这种形式!
      
                   // Booleans
                   typeof true === 'boolean';
                   typeof false === 'boolean';
                   typeof Boolean(true) === 'boolean'; // 但不要使用这种形式!
      
                   // Symbols
                   typeof Symbol() === 'symbol';
                   typeof Symbol('foo') === 'symbol';
                   typeof Symbol.iterator === 'symbol';
                   // Undefined
                   typeof undefined === 'undefined';
                   typeof declaredButUndefinedVariable === 'undefined';
                   typeof undeclaredVariable === 'undefined';
      
                   // Objects
                   typeof {a:1} === 'object';
      
                   // 使用Array.isArray 或者 Object.prototype.toString.call
                   // 区分数组,普通对象
                   typeof [1, 2, 4] === 'object';
                   typeof new Date() === 'object';
      
                   // 下面的容易令人迷惑,不要使用!
                   typeof new Boolean(true) === 'object';
                   typeof new Number(1) === 'object';
                   typeof new String("abc") === 'object';
      
                   // 函数
                   typeof function(){} === 'function';
                   typeof class C{} === 'function'
                   typeof Math.sin === 'function';
                   typeof new Function() === 'function';
      
                   //null
                   typeof null === 'object'; // 从一开始出现JavaScript就是这样的
      
      
  • instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。

    • 判别内置对象类型和自定义对象类型
    • 不能判别原始类型
    • 语法
      object instanceof constructor
  • constructor

    • 识别标准类型(Undefined 和 Null 除外)
    • 识别内置对象类型
    • 识别自定义对象类型
  • object.prototype.toString

    • 可以识别标准类型以及内置对象类型
    • 不可以识别自定义类型
基本数据类型:Undefined 、Null、Boolean 、Number、String

Undefined 类型(未定义的值)

  • 未初始化的变量
  • 未声明的变量

Null 类型

  • 如果一个变量的值是 null ,则表示系统没有为这个变量分配内存空间
  • 从逻辑角度来来说,null 值表示空对象指针

Boolean 类型(布尔值)

  • 布尔值只有两个:true 和 false
  • 最大用途,用于条件的判断

Number 类型 (数字)

  • 在 JavaScript 中不区分整形和浮点型
  • 对于极大或者极小的数值,可以用科学计数法表示
  • NaN 非数值
    • 任何涉及 NaN 的操作(例如 NaN/10)都会返回 NaN
    • NaN 与任何值都不相等,包括 NaN 本身
    • isNaN() 函数 接受任何类型,isNaN() 在接受一个参数时,会尝试将这个值转换为数值,判断参数是否 “不是数值”。

String 类型 (字符串)

  • 使用英文单引号或者双引号括起来的内容
  • 在单引号中不可以包含单引号,但可以包含双引号
  • 在双引号中不可以包含双引号,但可以包含单引号
             var str = "This ia a string";
             var str = '这是一个字符串';
             var str = 'This is a "string"';
             var str = "这是一个'字符串'";
    

5. 运算符

算数运算符

  • " + " 加法
    • 数字 + 数字 = 数字
    • 字符串 + 字符串 = 字符串
    • 字符串 + 数字 = 字符串
  • " - " 减法
  • " * " 乘法
  • " / " 除法
  • % 求余 10 % 4 = 2
  • ++ 自增
    • i++ 指的是在使用 i 之后,再让 i 的值加上 1
      i = 1;j = i++
      上面的代码等价于 i = 1; j = 1; i = i+1; //最终结果 j = 1 , i = 2
    • ++i 值得是在使用 i 之前,先让 i 的值加上1
      i = 1; j = ++i;
      上面的等价于 i = 1; i = i + 1; j = i; // 最终结果为 j = 2 , i = 2
  • -- 自减 也有两种情况(跟自增一样的情况)
    • --i
    • i--

赋值运算符

  • =
  • +=
    var a += b 等价于 var = a + b
  • -=
    var a -= b 等价于 var a = a - b
  • *=
    var a *= b 等价于 var a = a * b
  • /=
    var a /= b 等价于 var a = a / b

比较运算符(结果为 true 或者 false)

    >
    <
    >=
    <=
    ==
    !=

逻辑运算符

  • &&
    运算符 && 两边,只要有一个不为真就返回 false
  • ||
    运算符 || 两边只要有一个为真就返回 true
  • !
    取反,返回 布尔值

条件运算符
条件运算符(也叫三目运算符)。var a = 条件 ? 表达式1 : 表达式2

  • 当条件为 true 时,a = 表达式1
  • 但条件为 false 时 , a = 表达式2

6. 表达式与语句

一个表达式包含“操作数”和“操作符”。比如 a = b +2
语句就是用英文分号分开的代码,一个分号就对应一条语句
var a = 1 +2; // 这是一条语句,其中 a = 1 +2 是一个表达式

7. 类型转换

String 类型转换为 Number类型

  • Number()
    可以将任何“数字型字符串转换成”数字

  • parseInt() 、parseFloat()
    提取“首字符为数字的任意字符串”中的数字,parseInt() 提取的是整数部分,parseFloat() 提取的不仅是整数部分,还提取小数部分,如果第一个字符不是数字(“+”“-” 字符除外),则返回 NAN。

数字转换为空字符串

  • 与空字符串相加 (隐式类型转换法)
  • toString() 方法 (显示类型转换法)
  • 在实际的开发中,如果想要将数字转换为字符串,很少使用 toString() 方法,而更多的是使用隐式类型转换法

转义字符
注释

  • 单行注释
    • // 单行注释
  • 多行注释
    • /* 多行注释 */

流程控制
在 JavaScript 中,有{} 括起来的程序,我们称之为“语句块”。语句块常用于选择结构,循环结构以及函数体中,JavaScript 把一个语句块看成是一个整体来执行。

顺序结构

  • 单向选择 if···
  • 多向选择 if ··· else ···
  • 双向选择 if ··· else if ··· else ···
  • if 语句的嵌套

选择结构

  • if 语句
  • switch 语句 (switch 在实际开发中非常重要)
    switch (判断值) {
              case 取值 1:
                      语句块 1; break;
              case 取值 2:
                      语句块 2; break;
              ······
              case 取值 n:
                      语句块 n; break;
              default:
                      语句块 n+1;
              }
    
    

循环结构

  • while 语句
    while (expression) statement
    示例
         var i = 0;
          while (i < 10) {
          i += 2;
          }
    
  • do-while 语句
    do {
    statement
    } while (expression)
    示例
          var i = 0;
          do {
                i += 2;
             } while (i < 10);
    
  • for 语句
  • 总结
    while 语句和 do-while 语句 是可以相互转换的
    while 语句是“先判断后执行”,do-while 语句是“先循环后判断”,因此 do-while 语句会无条件执行一次
    在实际开发中,一般都是使用 while 语句

函数

为了减轻重复编码的负担,JavaScript 引入了函数的概念

函数分类

  • 自定义函数
  • 内置函数
    JavaScript 内部已经定义好的函数,我们不需要自己写函数体,直接调用即可
    • parseInt() 提取字符串中的数字,只提取整数部分
    • parseFloat() 提取字符串中的数字,可以提取小数
    • isFinite() 判断某一个数是否是一个有限数
    • isNaN() 判断一个数是否是 NaN 值
    • escape() 对字符串进行编码
    • unescape() 对字符串进行解码
    • eval() 把一个字符串当作一个表达式去执行

函数一般在以下两中情况中使用

  • 需要重复使用
  • 特定功能

在 JavaScript 中,如果想要使用函数(内置函数除外),一般只需两步

  • 定义函数
  • 调用函数

函数的定义

  • 没有返回值的函数
  • 有返回值的函数:执行完以后,会返回一个值,这个值可以供我们使用

总结

  • 有返回值的函数,相对没有返回值的函数来说,只多了一个 return 语句。return 语句就是用来返回一个结果
  • 一般情况下,如果后面的程序需要用到函数的计算结果,就要用 return 语句返回
  • 如果一个函数仅仅被定义而没有被调用,则函数本身不会执行。
  • JavaScript 自上而下执行代码,遇到函数定义部分会直接跳过(忽略掉),只有遇到函数调用才会返回来去执行定义部分。
  • 一般情况下,函数值可以返回一个值或者变量,若想要返回多个值,可以返回一个数组。

函数的调用方式

  • 直接调用(一般用于“没有返回值的函数”)
  • 在表达式中调用(一般用于“有返回值的函数”)
  • 在超链接中调用
  • 在事件中调用

嵌套函数

引用类型

在 ECMAScript 中,引用类型是一种数据结构,用于将数据和功能结合起来,引用类型的值(对象)是引用类型的一个实例

  • Object 类型
  • Array 类型
  • Date 类型
  • RegExp 类型
  • Function 类型
  • 基本包装类型
    • Boolean 类型
    • Number 类型
    • String 类型

对象简介

  • 一组数据和功能的集合
  • 对象可以通过 new 操作符后跟要创建的对象类型(构造函数)的名称来创建
  • 创建 Object 类型的实例并为其添加属性或方法,就可以创建自定义对象

对象分类

  • 内置对象 (常用)
    • 字符串对象 String
      • 属性
        • 获取字符串的长度
        • 语法:字符串名.length
        • 在实际开发中,获取字符串的长度用的非常多
      • 方法
        • 获取单个字符 charAt() , charCodeAt() 以字符编码的形式返回
        • 语法: 字符串名.charAt() , 字符串名.charCodeAt()
        • 方括号语法取得单个字符 字符串名[i]
      • 字符串的操作方法
        • 连接字符

          • concat() 用于将一个或多个字符串拼接起来,返回拼接得到的新字符串
          • 在实际的开发中,拼接字符串更多的是使用,加号操作符。
        • 截取字符 slice()、substr()、sunstring()

          • 返回被截取的字符串,接受一个或两个参数。

          • 取值范围 [start,end)

          • 不会修改原字符串的值,只会返回一个基本类型的字符串的值

          • substr() 的第一个参数表示截取的开始位置,第二个参数表示返回的字符个数

          • slice() 和 substring() 的第一个参数表示截取的开始位置,第二个参数表示截取的结束位置

          • 如果没有给这些方法传递第二个参数,则将字符串的末尾作为结束位置

          • 示例

             var stringValue = "Hello world";
             stringValue.slice(3) // "lo world"
             stringValue.substring(3) // "lo world"
             stringValue.substr(3) // "lo world"
             stringValue.slice(3,7) // "lo w"
             stringValue.substring(3,7) // "lo w"
             stringValue.substr(3,7) // "lo worl"
            
            
          • 参数为负值的情况

            • slice() 将所有的负值与字符串的长度相加
            • substring() 将所有的负值变为 0 ,这个方法会将较小的数作为开始位置,将较大的数作为结束位置
            • substr() 将第一个参数的负值与字符串的长度相加后的值作为第一个参数,第二个参数的负值变为 0
            • 示例
              var stringValue = "Hello world";
              stringValue.slice(-3) // 等价于 stringValue(-3+11) "rld"
              stringValue.substring(-3) // 等价于 stringValue(0) "Hello world"
              stringValue.substr(-3) // 等价于 stringValue(-3+11) "rld"
              stringValue.slice(3,-4) // 等价于 stringValue(3,7) "lo w"
              stringValue.substring(3,-4) // 等价于 stringValue(0,3) "Hel"
              stringValue.substr(3,-4) // 等价于 stringValue(3,0) "空字符串"
              
              
        • 检索字符串的位置

          • indexOf() 从字符串的开头开始搜索
          • lastIndexOf() 从字符串的结尾开始搜索
            这两个方法都是从一个字符串中搜索给定的字符串,并返回字符串的位置,如果没有找到,则返回 -1
          • 示例
            var stringValue = "hello world";
            sringValue.indexOf("o"); // 4
            stringValue.lastIndexOf("o"); // 7
            
          • 可以接受第二个参数,表示从字符串的那个位置开始搜索
            • 示例
              var stringValue = "hello world";
              stringValue.indexOf("o",6) // 7
              stringValue.lastIndexOf("o",6); // 4
              
        • 分割字符 split()
          把一个字符串分割成一个数组,这个数组存放的是原来字符串的所有字符片段

          • 语法 字符串名.split(“分隔符”)
            • 分隔符可以是一个字符、多个字符或一个正则表达式。分隔符并不作为返回数组元素的一部分
            • 示例
              var stringValue = "HTML,CSS,JavaScript";
              var arr;
              arr = stringValue.split(",");
              console.log(arr[0]); // HTML
              console.logg(arr[1]) // CSS
              console.log(arr[3]) // JavaScript
              
        • 替换字符 replace() ,返回新的字符串
          用一个字符串替换另一个字符串的某一部分,

          • 语法:字符串名.replace(原字符串/正则表达式,替换字符串)
          • 示例
            var str = "I love javascript";
            str_new = str.replace("javascript","vue.js");
            console.log(str_new); // "I love vue.js"
            
        • 大小写转换
          toLowerCase() 大写转小写
          toUpperCase() 小写转大写

    • 数组对象 Array
      • 数组的创建
        • 使用 new 关键字来创建

          var arr = new Array ();
          var arr = new Array(20); // 创建 length 值为 20 的数组
          var arr = new Array("red","blue","green"); // 创建一个包含 3 个字符串的数组
          
          
        • 数组字面量

          var arr = ["red","blue","green"];
          var arr = []; // 创建一个空数组
          
    • 属性 length
    • 检测数组方法
      • instanceof
        if (value instanceof Arrary) { //执行某操作}
      • isArray() 方法
    • 转换方法 (数组转换为字符串)
      • toLocaleString()、toString()、valueOf()

      • 调用 valueOf() 返回的是数组本身

      • 调用 toString() 和 toLocaleString() 方法,返回数组中由每个值的字符串形式,拼接而成的一个以逗号分隔开的字符串

      • 示例

        var colors = ["red","blue","green"]';
        concole.log(colors.toString()); // red,blue,green
        console.log(colors.toLocaleString()) // red,blue,green
        console.log(colors.valueOf()) // red,blue,green
        
        
      • join() 方法
        调用数组的 join() 方法,可以使用不同的分隔符返回字符串
        示例

        var colors = ["red","blue","green"]';
        console.log(colors.join("|")) // red | blue | sgreen
        
    • 操作数组的方法
      1. 截取数组某部分 slice()
        数组名.slice(start,end) 截取范围 [start,end)

        • 使用方法同字符串的 slice() 方法
        • 不会改变原数组的值,返回一个数组
      2. 添加数组元素

        • 为数组的开头添加元素: unshift() 队列方法,可以为数组添加任意个项,并返回数组的长度
        • 为数组的末尾添加元素: push() 栈方法,接受任意数量的参数,返回数组的长度
        • 栈数据结构访问规则
          后进先出 (最新添加的最早被移除,在列表的末端添加项,从列表的末端移除项)
        • 队列数据结构访问规则
          先进先出 (最先添加的最早被移除,在列表的末端添加项,从列表的前端移除项)
      3. 删除数组元素

        • 从数组的末尾删除元素: pop() 栈方法,从数组的末尾移除最后一项,减少数组的 length 值,返回移除的项
        • 从数组的开头删除元素: shifft() 队列方法,从数组的开头移除一项,减少数组的 length 值,返回移除的项
        • 示例 push() 、pop()
          var colors = ["red","black"];
          var count = colors.push("green")
          console.log(colors[2]); // black
          cosole.log(count); // 3
          var item = colors.pop(); // 栈方法,最后添加的先被移除
          console.log(item); // green
          console.log(count); // 2
          
        • 示例 shift() 、 push()
          var colors = ["red","black"];
          var count = colors.push("green");
          console.log(count); // 3
          var item = colors.shift(); // 队列方法,先添加的先被移除
          console.log(item); // red
          console.log(count); // 2
          
          
      4. 数组颠倒顺序

        • reverse() 反转数组的顺序
        • 示例
          var values = [1,2,3,4,5];
          values.reverse();
          alert(values); // 5,4,3,2,1
          
      5. 数组大小比较

        • sort() 按升序排列数组项,在排序时,sort() 方法会调用数组项的 toString() 转型方法,然后比较得到的字符串
        • 示例
            var values = [0,1,5,10,15];
            values.sort();
            alert(values); // 0,1,10,15,5 由于调用了 toSstring() 方法,故“10” < "5"
          
        • sort() 还可以接受一个比较函数作为参数,返回负数则 value1 > value2;返回正数或者 0 ,则 value1 < value2;
          function compare (value1,value2) {
          return value1 - value2;
          }
          var values = [0,1,5,10,15];
          alert(values.sort(compare)); // 0,1,5,10,15
          
    • 时间对象 Date
      1. 操作年月日
        • 获取年 月 日
          • getFullYear() 获取年份,取值为四位数
          • getMonth() 获取月份,取值为 0 (一月)到11 (十二月)之间
          • getDate() 获取日数,取值为1~31之间的整数
        • 设置年 月 日
          • setFullYear() 可以设置年 月 日
          • setMonth() 可以设置月 日
          • setDate() 可以设置日
      2. 操作时分秒
        • 获取时 分 秒
          • getHours() 获取小时数,取值为 0 ~ 23 之间的整数
          • getMinutes() 获取分钟数,取值为 0~59 之间的整数
          • getSeconds()获取秒数,取值为 0~59 之间的整数
        • 设置时 分 秒
          • setHours() 可以设置时 分 秒 毫秒
          • setMinutes() 可以设置分 秒 毫秒
          • setSeconds() 可以摄住秒 毫秒
      3. 获取星期几
        • getDay() 返回一个数字 ,其中 0 表示星期天,1~6 分别表示星期一~星期六
        • 想要将数字变为中文
          可以定义一个数组 weekday,用来存储表示星期几的字符串
          var weekday = ["星期天","星期一","星期二","星期三","星期四","星期五","星期六"];
          var d = new Date();
          var myWeekday = weekday[d.getDay()];
          
      4. 示例 获取月份
        var date = new Date();
        var myMonth = date.getMonth() + 1 //
        
    • 数学对象 Math
      动画开发、高级编程、算法研究都跟数学对象有关
      实际开发中,角度都是以”弧度”为单位的。推荐度数写法:度数*Math.PI/180
      1. Math 属性 (数学中常使用的”常量“)

        • PI 圆周率
        • LN2 2 的自然对数
        • LN10 10 的自然对数
        • LOG2E 以2为底的 e 的对数
        • LOG10E 以 10 为底的 e 的对数
        • SORT2 2 的平方根
        • SORT1_2 2的平方根的倒数
      2. Math 方法 (常用)

        • max(a,b,···,n)
        • min(a,b,···,n)
        • sin(x)
        • cos(x)
        • atan2(x)
        • floor(x) 向下取整
        • ceil(x) 向上取整
        • random() 随机数
      3. Math 方法 (不常用)

        • abs(x) 返回 x 的绝对值
        • sqrt(x) 返回 x 的平方根
        • log(x) 返回 x 的自然对数(以 e 底)
        • pow(x,y) 返回 x 的 y 次幂
        • exp(x) 返回 x 的指数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,646评论 4 366
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,979评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,391评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,356评论 0 215
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,740评论 3 293
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,836评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,022评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,764评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,487评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,728评论 2 252
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,200评论 1 263
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,548评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,217评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,134评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,921评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,919评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,766评论 2 274

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,059评论 0 13
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,155评论 0 4
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,014评论 0 1
  • 我家扫墓的地方在金山枫泾。 记得小时候清明扫墓,每天天未亮便起床坐车去人民广场,然后在坐长途车至金山,中间还会停靠...
    沈闲庭阅读 266评论 0 1
  • 梦想。 对一个十七岁的孩子来说,这是遥远又似乎近的可以碰到的东西。 常常在想,即将成年的我,未来将是什么样子?是平...
    _FLUENT阅读 445评论 2 0