JavaScript基础讲解

JavaScript :简称:js

js分三个部分:
1. ECMAScript 标准----js的基本的语法
2. DOM------Document Object Model 文档对象模型
3. BOM------Browser Object Model 浏览器对象模型

JavaScript是什么?
是一门脚本语言
是一门解释性语言
是一门动态类型的语言
是一门基于对象的语言

编译语言:需要把代码翻译成计算机所认知的二进制语言,才能够执行
脚本语言:不需要编译,直接执行
常见的脚本语言:t-sql,cmd

电脑的硬件---->系统--->客户端的程序--->代码
电脑的硬件---->系统--->浏览器--->js代码
js原名不是JavaScript,而是LiveScript
js的作用?解决用户和浏览器之间的交互的问题
js现在可以做什么?

* HTML:是标记语言,展示数据的
* CSS:美化页面
* JavaScript:用户和浏览器交互,

js的代码可以分三个地方写:

1.在html的文件中,script的标签中写js代码
2.js代码可以在html的标签中写---
3.在js文件中可以写js代码,但是需要在html的页面中引入 script的标签中的src="js的路径"

变量

操作的数据都是在内存中操作
* js中存储数据使用变量的方式(名字,值--->数据)
* js中声明变量都用var---->存储数据,数据应该有对应的数据类型
* js中的字符串类型的值都用双引号或者单引号

  • 变量---作用,存储数据的或者是操作数据

    • 变量声明(有var 有变量名字,没有值)

    • 变量初始化(有var 有变量名字,有值)

    • 变量声明的方式:

    • var 变量名字;

    //存储一个数字10
    var number = 10;
    //存储一个5
    var number2 = 5;
    //存储一个人的名字
    var name = "小黑";
    //存储真(true)
    var flag = true;
    //存储一个null--->相当于是空
    var nll = null;
    //存储一个对象
    var obj = new Object();

js中的原始数据类型:

number,string,boolean,null,undefined,object

number:数字类型(整数和小数)
string:字符串类型(的值一般都是用单引号或者是双引号括起来) "34"
boolean:布尔类型(值只有两个,true(真1),false(假0))
null:空类型,值只有一个:null,一个对象指向为空了,此时可以赋值为null
undefined:未定义,值只有一个:undefined

操作符:一些符号-----用来计算

  • 算数运算符: + - * / %
    • 算数运算表达式:由算数运算符连接起来的表达式
    • 一元运算符: 这个操作符只需要一个操作数就可以运算的符号 ++ --
    • 二元运算符: 这个操作符需要两个操作数就可以运算,
    • 三元运算符:
    • 复合运算符: += -= *= /= %=
    • 复合运算表达式:由复合运算符连接起来的表达式
    • var num=10;
    • num+=10;------>就是:num=num+10;
    • console.log(num);20
    • 关系运算符: > < >= <= ==不严格的 ===严格的 !=不严格的不等 !==严格的不等
    • 关系运算表达式:由关系运算符连接起来的表达式
    • 关系运算表达式的结果是布尔类型
    • 逻辑运算符:
    • &&---逻辑与--并且
    • ||---逻辑或---或者
    • !---逻辑非---取反--取非
    • 逻辑运算表达式:由逻辑运算符连接起来的表达式
    • 表达式1&&表达式2
    • 如果有一个为false,整个的结果就是false
    • 表达式1||表达式2
    • 如果有一个为true,整个的结果为true
    • !表达式1
    • 表达式1的结果是true,整个结果为false
    • 表达式1的结果是false,整个结果为true
      赋值运算符: =

流程控制;代码的执行过程

1.顺序结构:从上到下,从左到右执行的顺序,就叫做顺序结构(不是很眼睛)
2.分支结构:if语句,if-else语句,if-else if-else if...语句,switch-case语句,三元表达式语句
3.循环结构:while循环,do-while循环,for循环,后期还有一个for-in循环

if语句:主要是判断

语法:
if(表达式){
代码块
}
执行过程:
先判断表达式的结果是true还是false,如果是true则执行代码块,如果是false,大括号中的代码是不执行的

if-else 语句

语法:
if-else语句的语法:
if(表达式){
代码1
}else{
代码2
}
执行过程:
如果表达式的结果是true则执行代码1,如果表达式的结果是false,则执行代码2

三元表达式

运算符号: ? :
语法:
var 变量=表达式1?表达式2:表达式3;
执行过程:
表达式1的结果是true还是false,如果是true则执行表达式2,然后把结果给变量 如果表达式1的结果是false,则执行表达式3,把结果给变量

if-else if语句...

语法:
if(表达式1){
代码1
}else if(表达式2){
代码2
}else if(表达式3){
代码3
}else{
代码4
}
else if---这种结构可以写多个,具体多少个看需求, else--结构是可以不用写的,具体也是看需求
执行过程:
先判断表达式1的结果,
如果为true则执行代码1
如果为false,则判断表达式2
如果表达式2为true则执行代码2
如果为false,则判断表达式3
如果表达式3为true则执行代码3
否则执行代码4

switch-case语句

语法:
switch(表达式){
case 值1:代码1;break;
case 值2:代码2;break;
case 值3:代码3;break;
case 值4:代码4;break;
...多个case
default:代码5;
}
执行过程:
获取表达式的值,和值1比较,如果一样,则执行代码1,遇到break则跳出整个的语句,后面代码不执行
如果表达式的值和值1不一样,则和值2比较,如果相同则执行代码2,遇到break则跳出
否则和值3比较,相同则执行代码3,遇到break,跳出,否则和值4比较,相同则执行代码4,遇到break则跳出,否则直接执行代码5

while循环

while循环语法:

计数器
var 变量=0;
while(循环的条件){
循环体;
计数器++;
}

  • 先判断条件是否成立,(条件的结果是true还是false),如果是false,那么循环的代码(while的大括号中的代码都不执行),如果是true,那么先执行循环体,然后执行计数器,然后,直接去--->循环的条件,再次判断是否成立,成立则继续执行循环体,否则跳出循环,执行完循环体之后,计数器加1,然后再去循环的条件,判断,成立则循环,否则跳出循环
 var i=0;
 while(i<20){
 循环体
 i++;
 }

do-while循环

语法:
do{
循环体
}while(条件);

执行过程:
先执行一次循环体,然后判断条件是否成立,不成立,则跳出循环,成立则执行循环体,然后再判断条件是否成立,成立则继续循环,否则跳出.....

    var i = 1;
    var sum = 0;
    do {
      if (i % 3 == 0) {
        sum += i;
      }
      i++;
    } while (i <= 100);
    console.log(sum);

while循环特点:先判断,后循环,有可能一次循环体都不执行
do-while循环特点:先循环,后判断,至少执行一次循环体

for循环

语法:
for(表达式1;表达式2;表达式3){
循环体;
}

执行过程:
先执行一次表达式1,然后判断表达式2;如果不成立则直接跳出循环
如果表达式2成立,执行循环体的代码,结束后,跳到表达式3执行,然后跳到表达式2,判断表达式2是否成立,不成立,则跳出循环
如果表达式2成立,则执行循环体,然后再跳到表达式3,再跳到表达式2,判断是否成立,一直如此

    var sum = 0;
    for (var i = 1; i <= 100; i++) {
      sum += i;
    }
    console.log("和为:" + sum);

break关键字:如果在循环中使用,遇到了break,则立刻跳出当前所在的循环

    for(var i=100;i<=200;i++){
      if(i%7==0){
        console.log(i);
        break;
      }
    }

continue:在循环中如果遇到continue关键字,直接开始下一次循环

    var sum=0;
    var i=1;
    while(i<=10){
      if(i%10==3){
        //个位数是3,不要
        i++;
        continue;
      }
      sum+=i;
      i++;
    }
    console.log(sum);

数组:一组有序的数据

数组的作用:可以一次性存储多个数据
数组的定义:

  1. 通过构造函数创建数组
    var 数组名=new Array();
    var array=new Array(); 定义了一个数组
    var 数组名=new Array(长度)

如果数组中没有数据,但是有长度---,数组中的每个值就是undefined
构造函数的方式创建数组的时候,如果在Array(一个数字)--->数组的长度(数组元素的个数)
如果在Array(多个值);这个数组中就有数据了,数组的长度就是这些数据的个数

  1. 通过字面量的方式创建数组
    var 数组名=[ ];空数组
    var array=[ ];

数组:一组有序的数据
数组元素:数组中存储的每个数据,都可以叫数组的元素,比如:存储了3个数据,数组中3个元素
数组长度:就是数组的元素的个数,比如有3个元素,就说,这个数组的长度是3
数组索引(下标):用来存储或者访问数组中的数据的,索引从0开始,到长度减1结束
数组的索引和数组的长度的关系:长度减1就是最大的索引值

通过构造函数的方式定义一个数组

var array=new Array(5);//没有数据,空数组
console.log(array);
alert(array);

 就是一个数组---->字面量的方式
 var arr=[];
 console.log(arr);

var arr3=new Array(10,20,1000,40,50,60);
console.log(arr3);

 var arr=new Array(10,20,30,40,100);
  //console.log(arr[4]);//获取
  //设置
 arr[3]=1000;
 console.log(arr);

 字面量的方式更简单

 var arr=[10,20,30,40,50,60,70,80,10,20,3043,5];//空数组
 console.log(arr.length);

数组知识的总结

数组:存储一组有序的数据
数组的作用:一次性存储多个数据
数组的定义方式:
1.构造函数定义数组: var 数组名=new Array();
2.字面量方式定义数组: var 数组名=[];
var 数组名=new Array();空数组
var 数组名=new Array(值);数组定义了,有长度
var 数组名=new Array(值1,值2,值3....);定义数组并且有多个数据
var 数组名=[];空数组
var 数组名=[值1,值2,值3];有三个数据
数组元素:就是数组中存储的数据
数组长度:就是数组中元素的个数
数组索引(下标):从0开始,到数组的长度减1结束
通过下标设置数组的元素值: 数组名[索引]=值
通过下标访问数组的元素值: 数组名[索引]

    var arr1=new Array();//空数组
    var arr2=new Array(5);//长度为5的数组,每个数据的值是undefined
    var arr3=new Array(1,2,3,4,5);//长度为5分数组,
    var arr4=[];//空数组
    var arr5=[1,2,3];//长度为3的数组
    var arr6=["red","blue","green",1,true];//数组中元素的值的类型可以不一样

    var arr7=[];
    //设置数组的元素的值
    arr7[0]=10;
    arr7[1]=20;

遍历数组

    var arr=[10,20,30,40,50,60,70,80,90,100];
//小于的是数组的长度--个数
    for(var i=0;i<arr.length;i++){
      console.log(arr[i]);
    }

冒泡排序:把所有的数据按照一定的顺序进行排列(从小到大,从大到下)

    var arr = [10, 0, 100, 20, 60, 30];
    //循环控制比较的轮数
    for (var i = 0; i < arr.length - 1; i++) {
      //控制每一轮的比较的次数
      for (var j = 0; j < arr.length - 1 - i; j++) {
        if (arr[j] < arr[j + 1]) {
          var temp = arr[j];
          arr[j] = arr[j + 1];
          arr[j + 1] = temp;
        }
      }
    }
    console.log(arr);

函数:把一坨重复的代码封装,在需要的时候直接调用即可

函数的作用:代码的重用
语法:

function 函数名字(){
  函数体-----一坨重复的代码
 }

函数参数:

形参:函数在定义的时候小括号里的变量叫形参
实参:函数在调用的时候小括号里传入的值叫实参,实参可以是变量也可以是值

函数的返回值

在函数内部有return关键字,并且在关键字后面有内容,这个内容被返回了
当函数调用之后,需要这个返回值,那么就定义变量接收,即可

  • 如果一个函数中有return ,那么这个函数就有返回值
  • 如果一个函数中没有return,那么这个函数就没有返回值
    如果一个函数中没有明确的返回值,那么调用的时候接收了,结果就是undefined
    (没有明确返回值:函数中没有return,函数中有return,但是return后面没有任何内容)
    函数没有返回值,但是在调用的时候接收了,那么结果就是undefined
    变量声明了,没有赋值,结果也是undefined
    如果一个函数有参数,有参数的函数
    如果一个函数没有参数,没有参数的函数
    形参的个数和实参的个数可以不一致
    return 下面的代码是不会执行的
   function getSum(x, y) {
     var sum = x + y;
     return sum;//把和返回

   }
   //函数调用
   var result=getSum(10, 20);
   console.log(result+10);



    函数定义: 有参数有返回值的函数
   function getSum(x, y) {
     return  x + y;//把和返回
   }
   //函数调用
   var result=getSum(10, 20);
   console.log(result+10);



    有参数,有返回值的函数
   function f1(x,y) {
     return x+y;
   }
   //有参数,无返回值的函数
   function f2(x) {
     console.log(x);
   }
   //无参数,有返回值的函数
   function f3() {
     return 100;
   }
   //无参数无返回值的函数
   function f4() {
     console.log("萨瓦迪卡");
   }


   var sum=f1(10);
   console.log(sum);//

arguments----->数组使用------伪数组---

使用arguments对象可以获取传入的每个参数的值
    function f1() {
      var sum=0;
      for(var i=0;i<arguments.length;i++){
        sum+=arguments[i];
      }
      return sum;
    }

    console.log(f1(10,20,30));

命名函数和匿名函数

函数如果有名字,就是命名函数.
函数如果没有名字,就是匿名函数
函数的另一种定义方式
函数表达式:把一个函数给一个变量,此时形成了函数表达式
var 变量=匿名函数

 var f1=function (){
  
  };
//如果是函数表达式,那么此时前面的变量中存储的就是一个函数,而这个变量就相当于是一个函数,就可以直接加小括号调用了

函数可以作为参数使用,如果一个函数作为参数,那么我们说这个参数(函数)可以叫回调函数


//函数声明,fn是变量,fn是参数,
   function f1(fn) {
     fn();//函数调用---说明fn这个变量中存储的是一个函数
   }

   function f2() {
     console.log("哦,这也可以");
   }
   f1(f2);

作用域

全局变量:声明的变量是使用var声明的,那么这个变量就是全局变量,全局变量可以在页面的任何位置使用
除了函数以外,其他的任何位置定义的变量都是全局变量 局部变量:在函数内部定义的变量,是局部变量,外面不能使用 全局变量,如果页面不关闭,那么就不会释放,就会占空间,消耗内存

全局作用域:全局变量的使用范围
局部作用域:局部变量的使用范围

块级作用域:一对大括号就可以看成是一块,在这块区域中定义的变量,只能在这个区域中使用,但是在js中在这个块级作用域中定义的变量,外面也能使用;
说明:js没有块级作用域,只有函数除外
隐式全局变量:声明的变量没有var,就叫隐式全局变量
全局变量是不能被删除的,隐式全局变量是可以被删除的
定义变量使用var是不会被删除的,没有var是可以删除的

预解析:就是在解析代码之前

预解析做什么事?
把变量的声明提前了----提前到当前所在的作用域的最上面
函数的声明也会被提前---提前到当前所在的作用域的最上面

编程思想

编程思想:把一些生活中做事的经验融入到程序中
面向过程:凡事都要亲力亲为,每件事的具体过程都要知道,注重的是过程
面向对象:根据需求找对象,所有的事都用对象来做,注重的是结果
面向对象特性:封装,继承,多态 (抽象性)
js不是面向对象的语言,但是可以模拟面向对象的思想
js是一门基于对象的语言:
万物皆对象:

创建对象三种方式:

1.调用系统的构造函数创建对象
var 变量名= new Object(); Object 是系统的构造函数 Array

    //实例化对象
    var obj = new Object();
    //对象有特征---属性和行为---方法
    //添加属性-----如何添加属性?  对象.名字=值;
    obj.name = "小苏";
    obj.age = 38;
    obj.sex = "女";
    //添加方法----如何添加方法? 对象.名字=函数;
    obj.eat = function () {
      console.log("我喜欢");
    };

2.自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象)

    function createObject(name,age) {
      var obj = new Object();//创建对象
      //添加属性
      obj.name = name;
      obj.age = age;
      //添加方法
      obj.sayHi = function () {
        console.log("阿涅哈斯诶呦,我叫:" + this.name + "我今年:" + this.age);
      };
      return obj;
    }
    //创建人的对象
    var per1 = createObject("小芳",20);
    per1.sayHi();
    //创建一个人的对象
    var per2 = createObject("小红",30);
    per2.sayHi();

作用:一次性创建多个对象,把创建对象的代码封装在一个函数中

3.字面量的方式创建对象
字面量创建对象的缺陷: 一次性的对象

    var obj={};
    obj.name="小白";
    obj.age=10;
    obj.sayHi=function () {
      console.log("我是:"+this.name);
    };
    obj.sayHi();

函数和构造函数的区别;名字是不是大写(首字母是大写)

    function Person(name,age) {
      this.name=name;
      this.age=age;
      this.sayHi=function () {
        console.log("我叫:"+this.name+",年龄是:"+this.age);
      };
    }

自定义构造函数创建对象:先自定义一个构造函数,创建对象

    var obj=new Person("小明",10);
    console.log(obj.name);
    console.log(obj.age);
    obj.sayHi();

    var obj2=new Person("小红",20);
    console.log(obj2.name);
    console.log(obj2.age);
    obj2.sayHi();


    console.log(obj instanceof Person);
    console.log(obj2 instanceof  Person);

JSON格式的数据:一般都是成对的,是键值对,

json也是一个对象,数据都是成对的,一般json格式的数据无论是键还是值都是用双引号括起来的


    var json = {
      "name": "小明",
      "age": "10",
      "sex": "男"
    };

遍历对象,是不能通过for循环遍历,无序
key是一个变量,这个变量中存储的是该对象的所有的属性的名字

for (var key in json) {
      console.log(key + "===========" + json[key]);
    }

js学习中三种对象

1.内置对象----js系统自带的对象
2.自定义对象---自己定义的构造函数创建的对象
3.浏览器对象---BOM

内置对象: Math Date String Array Object

Math.PI----π---
Math.E----常数的底数
Math.abs(值)-----绝对值
Math.ceil(值)----向上取整
Math.floor(值)---向下取整
Math.random---随机数字
Math.sqrt()----开平方
Math.pow()----一个数字的多少次幂

Date

   var dt=new Date();
   var dt=+new Date();//一种特殊的写法,只适用于这个Date的对象
   console.log(dt);

   dt.getFullYear();//年
   dt.getMonth();//月---从0开始
   dt.getDate();//日
   dt.getHours();//小时
   dt.getMinutes();//分钟
   dt.getSeconds();//秒
   dt.getDay();//星期---从0开始
   dt.toDateString();//日期
   dt.toLocaleDateString();//日期
   dt.toTimeString();//时间
   dt.toLocaleTimeString();//时间
   dt.valueOf();//毫秒

字符串的常用属性:
length------>字符串的长度
charAt(索引),返回值是指定索引位置的字符串,超出索引,结果是空字符串
fromCharCode(数字值,可以是多个参数),返回的是ASCII码对应的值
concat(字符串1,字符串2,...);返回的是拼接之后的新的字符串
indexOf(要找的字符串,从某个位置开始的索引);返回的是这个字符串的索引值,没找到则返回-1
lastIndexOf(要找的字符串);从后向前找,但是索引仍然是从左向右的方式,找不到则返回-1
replace("原来的字符串","新的字符串");用来替换字符串的
slice(开始的索引,结束的索引); 从索引5的位置开始提取,到索引为10的前一个结束,没有10,并返回这个提取后的字符串
split("要干掉的字符串",切割后留下的个数);切割字符串
substr(开始的位置,个数);返回的是截取后的新的字符串
substring(开始的索引,结束的索引),返回截取后的字符串,不包含结束的索引的字符串
toLocaleLowerCase();转小写
toLowerCase();转小写
toLocaleUpperCase()转大写
toUpperCase();转大写
trim();干掉字符串两端的空格

Array.isArray(对象)---->判断这个对象是不是数组

instanceof关键字
concat(数组,数组,数组,...) 组合一个新的数组
every(函数)--返回值是布尔类型,函数作为参数使用,函数中有三个参数,第一个参数是元素的值,第二个参数是索引值,第三个参数是原来的数组(没用)
如果这个数组中的每个元素的值都符合条件,最后才返回的是true
filter(函数);返回的是数组中每一个元素都复合条件的元素,组成了一个新的数组
push(值);--->把值追加到数组中,加到最后了---返回值也是追加数据之后的数组长度
pop();--->删除数组中最后一个元素,返回值就是删除的这个值
shift();--->删除数组中第一个元素,返回值就是删除的这个值
unshift();--->向数组的第一个元素前面插入一个新的元素,----返回值是插入后的程度
forEach(函数)方法---遍历数组用---相当于for循环
indexOf(元素值);返回的是索引,没有则是-1
join("字符串");----返回的是一个字符串
map(函数);--->数组中的每个元素都要执行这个函数,把执行后的结果重新的全部的放在一个新的数组中
reverse();----->反转数组
sort();---排序的,可能不稳定,如果不稳定,请写MDN中的那个固定的代码
arr.slice(开始的索引,结束的索引);把截取的数组的值放在一个新的数组中,但是不包含结束的索引对应的元素值
splice(开始的位置,要删除的个数,替换的元素的值);一般是用于删除数组中的元素,或者是替换元素,或者是插入元素

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

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,114评论 0 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • FreeCodeCamp - Basic JavaScript 写在前面: 我曾经在进谷前刷过这一套题,不过当时只...
    付林恒阅读 16,428评论 5 28
  • 没有深入了解过云计算,但第一想法觉得云计算应该就是部署在云端的高性能计算机组合吧,类似于远程服务器?!总之是互联网...
    贾晓東阅读 130评论 0 0
  • 帮助他人犹如泼出去的水,付出之前就别想到再收回。 我从不期望这些人回报,如果沾了他们一点光,我便会忐忑不安,总想再...
    暖水瓶dsy阅读 300评论 0 0