javaScript知识要点总结之ECMAScript(一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41961239/article/details/102756858

有的同学可能会好奇,为什么js的版本要用es+年份(例如es2015,es2016等),而不是js+年份,这就要说到ECMAScript(简称es),ECMAScript是一个语言标准,javascript则是基于这个标准实现的脚本语言。

javascript于1996年发布了第一版,当时的名字其实不叫javascipt,而是叫livescript,不过发布之后一直不温不火,正好这个时候sun公司推出来了一个面向对象的语言—Java,Java拥有很好的跨平台特性,一处编写处处执行,很快得到了市场的认可。

熟悉 Java、C 和 Perl 这些语言的开发者会发现 ECMAScript 的语法很容易掌握,因为它借用了这些语言的语法。

好了,废话不多说,直接开篇点题,下面是我在学习ECMAScript的过程中总结一些知识要点以及用自己的话理解ECMAScript

  • 首先,我们学习这们语言首先要明白什么是JavaScript

     * 是一门脚本语言
     * 是一门解释性语言
     * 是一门动态类型的语言
     * 是一门基于对象的语言
    
  • 然后简单的理解一下页面中有什么代码

    * html--展示内容,css---美化页面的,js---控制页面
    
  • 那么JavaScript的作用是什么呢?

    * 解决用户和浏览器之间的交互的问题
    

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

下面是在引用script标签中一些常见的问题:

  • 在一对script的标签中有错误的js代码,那么该错误的代码后面的js代码不会执行
  • 如果第一对的script标签中有错误,不会影响后面的script标签中的js代码执行
  • script的标签中可以写什么内容 type="text/javascript"是标准写法或者写language="JavaScript"都可以

但是,目前在我们的html页面中,type和language都可以省略,原因:html是遵循h5的标准

  1. 有可能会出现这种情况:script标签中可能同时出现type和language的写法.
  2. script标签在页面中可以出现多对
  3. script标签一般是放在body的标签的最后的,有的时候会在head标签中,目前讲课的时候都在body标签的后面(body中的最后)
  4. 如果script标签是引入外部js文件的作用,那么这对标签中不要写任何的js代码,如果要写,重新写一对script标签,里面写代码

正确的代码规范

扫描二维码关注公众号,回复: 7658674 查看本文章
  1. js中声明变量都用var
  2. js中的每一行代码结束都应该有分号;(写代码有分号的习惯)
  3. js中的大小写是区分的: var N=10; n
  4. js中的字符串可以使用单引号,也可以使用双引号

变量:

  1. 变量作用:用来操作数据的(可以存储,可以读取)
  2. 变量的声明:没有赋值
  3. var 变量名;
  4. 变量的初始化:有赋值
  5. var 变量名=值;
变量名的注意问题—变量名的命名规范,要遵循驼峰命名法
  • 变量的名字要有意义,
  • 变量名有一定的规范:一般以字母,$符号,下划线开头,中间或者后面可以有$符号,字母,数字
  • 变量名一般都是小写的
  • 变量名如果是多个单词,第一个单词的首字母是小写的,后面的所有的单词的首字母都是大写的,这种命名方式称为:驼峰命名法
  • 不能使用关键字(系统自带的一些单词,不能使用)
  • 不会单词用拼音,拼音也要遵循驼峰命名法

在写代码的时候是需要养成良好的注释习惯,注释:是解释代码的含义,给其他的程序员看的
JavaScript中注释的方式:

  1.单行注释  //	单行注释:一般用在一行代码的上面
  2.多行注释  /**/

现在开始进入正题

数据类型:

 * number:数字类型(整数和小数)
 * string:字符串类型(的值一般都是用单引号或者是双引号括起来)  "34"
 * boolean:布尔类型(值只有两个,true(真1),false(假0))
 * null:空类型,值只有一个:null,一个对象指向为空了,此时可以赋值为null
 * undefined:未定义,值只有一个:undefined
 * 什么情况下的结果是undefined
 * 变量声明了,没有赋值,结果是undefined
 * 函数没有明确返回值,如果接收了,结果也是undefined
 * 如果一个变量的结果是undefined和一个数字进行计算,结果:NaN不是一个数字,也没有意义
 * object:对象---->

数字类型:

  • 数字类型:整数和小数
  • num=20;整数
  • num=98.76;小数(其他的语言中,浮点型—单精度,双精度浮点)
  • 所有的数字都是属于number类型 其他的语言:
  • 整数类型:int
  • 单精度浮点型:float
  • 双精度浮点型:double
扩展:

无论是整数还是小数都是数字类型
不要用小数验证小数
不要使用NaN判断是不是NaN,应该使用isNaN(值或者是变量)
想要表示十进制:就是正常的数字
想要表示八进制:以0开头
想要表示十六进制:0x开头

字符串类型:

字符串可以使用单引号,也可以使用双引号 字符串的拼接: 使用+可以把多个字符串放在一起形成一个字符串
只要有一个是字符串,其他的是数字,那么结果也是拼接,不是相加 如果有一个是字符串,另一个不是字符串,使用-
号,此时会发生计算(浏览器帮助我们自动的把字符串类型转成了数字类型,这种方式叫:隐式转换)

类型转换:
.parseInt();//转整数 .parseFloat()//转小数 .Number();//转数字
.toString()//转字符串
//如果变量有意义调用.toString()使用转换
//如果变量没有意义使用String()转换

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

算数运算符:  
  * 算数运算表达式:由算数运算符连接起来的表达式 +  -  * / %
  * 一元运算符: 这个操作符只需要一个操作数就可以运算的符号  ++  --
  * ++ 和 --  可以分为:前+ 和后+  and   前- 和后-
  *  如果++在后面:如: num++ +10参与运算
  *  先参与运算,运算结束后自身再加1
  *  如果++在前面:如: ++num+10参与运算
  *  先自身加1,然后再参与运算
  * 二元运算符: 这个操作符需要两个操作数就可以运算,
  * 三元运算符: 运算符号:  ?  :    
  * 复合运算符: +=  -=  *=  /=  %=
  * 复合运算表达式:由复合运算符连接起来的表达式
  
  * 关系运算符: >  <  >=  <=  ==不严格的 ===严格的 !=不严格的不等 !==严格的不等
  * 关系运算表达式:由关系运算符连接起来的表达式
  * 关系运算表达式的结果是布尔类型
  
逻辑运算符:
     * &&---逻辑与--并且
     * ||---逻辑或---或者
     * !---逻辑非---取反--取非
     * 逻辑运算表达式:由逻辑运算符连接起来的表达式
     * 表达式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(表达式){
        代码1
    }else{
       代码2
     }

执行过程:

如果表达式的结果是true则执行代码1,如果表达式的结果是false,则执行代码2

  • 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;
     		   break;
      }

注意问题:

default后面的break是可以省略的
default也可以省略
switch-case 语句中和case后面的值比较的时候使用的是严格的模式
break是可以省略

执行过程:

获取表达式的值,和值1比较,如果一样,则执行代码1,遇到break则跳出整个的语句,后面代码不执行
如果表达式的值和值1不一样,则和值2比较,如果相同则执行代码2,遇到break则跳出
否则和值3比较,相同则执行代码3,遇到break,跳出,否则和值4比较,相同则执行代码4,遇到break则跳出,否则直接执行代码5

总结------分支语句:

  • if语句:一个分支
  • if-else语句:两个分支,最终只执行一个分支
  • if-else if-else if…语句: 多个分支,也是只会执行一个
  • switch-case语句:多分支语句,最终也会一个(必须要有break)
  • 三元表达式:和if-else语句是一样的
  • 什么时候使用if-else if…: 一般是对范围的判断
  • 什么时候使用switch-case语句:一般是对具体的值的判断
  • 如果有多个分支,是针对范围的判断一般选择if-else if的语句
  • 如果有多个分支,是针对具体的值判断,一般选择用switch-case语句

while循环语法:

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

执行过程:

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

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

执行过程:

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

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

执行过程:

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

注意:

break关键字:如果在循环中使用,遇到了break,则立刻跳出当前所在的循环
continue:在循环中如果遇到continue关键字,直接开始下一次循环

数组:

  1. 通过构造函数创建数组
    语法:

var 数组名=new Array();
var array=new Array();//定义了一个数组
数组的名字如果直接输出,那么直接就可以把数组中的数据显示出来,如果没有数据,就看不到数据
var 数组名=new Array(长度);
如果数组中没有数据,但是有长度—,数组中的每个值就是undefined
构造函数的方式创建数组的时候,如果在Array(一个数字)—>数组的长度(数组元素的个数)
如果在Array(多个值);这个数组中就有数据了,数组的长度就是这些数据的个数

  1. 通过字面量的方式创建数组

var 数组名=[];//空数组
var array=[];

无论是构造函数的方式还是字面量的方式,定义的数组,如果有长度,那么默认是undefined

* 数组:一组有序的数据
* 数组的作用:可以一次性存储多个数据
* 数组元素:数组中存储的每个数据,都可以叫数组的元素,比如:存储了3个数据,数组中3个元素
* 数组长度:就是数组的元素的个数,比如有3个元素,就说,这个数组的长度是3
* 数组索引(下标):用来存储或者访问数组中的数据的,索引从0开始,到长度减1结束
* 数组的索引和数组的长度的关系:长度减1就是最大的索引值
*
* 如何设置数组中某个位置的值
* 数组名[下标]=值;
* arr[3]=100;
* 如何获取数组中某个位置的值
* var result=数组名[下标];
* console.log(result);

总结:

  • var 数组名=new Array();空数组
  • var 数组名=new Array(值);数组定义了,有长度
  • var 数组名=new Array(值1,值2,值3…);定义数组并且有多个数据
  • var 数组名=[];空数组
  • var 数组名=[值1,值2,值3];有三个数据
  • 数组元素:就是数组中存储的数据
  • 数组长度:就是数组中元素的个数
  • 数组索引(下标):从0开始,到数组的长度减1结束
  • 通过下标设置数组的元素值: 数组名[索引]=值
  • 通过下标访问数组的元素值: 数组名[索引]

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

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

函数的调用:

 函数名();

函数参数:

  • 在函数定义的时候,函数名字后面的小括号里的变量就是参数,目的是函数在调用的时候,用户传进来的值操作
  • 此时函数定义的时候后面的小括号里的变量叫参数;写了两个变量,就有两个参数,
  • 在函数调用的时候,按照提示的方式,给变量赋值—>就叫传值,把这个值就传到了变量(参数)中
  • 形参:函数在定义的时候小括号里的变量叫形参
  • 实参:函数在调用的时候小括号里传入的值叫实参,实参可以是变量也可以是值

函数的返回值:

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

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

定义一个函数,如果不确定用户是否传入了参数,或者说不知道用户传了几个参数,没办法计算,获取的是函数在调用的时候,传入了几个参数

  • arguments----->可以获取函数调用的时候,传入的实参的个数
  • arguments是一个对象,是一个伪数组
  • arguments.length—>是实参的个数
  • arguments[索引]---->实参的值
 console.log(arguments.length);

使用arguments对象可以获取传入的每个参数的值

console.log(arguments);
 - 命名函数:函数如果有名字,就是命名函数  
 - 匿名函数:函数如果没有名字,就是匿名函数
  • 函数的另一种定义方式
  • 函数表达式:
  • 把一个函数给一个变量,此时形成了函数表达式

var 变量=匿名函数; //函数表达式

例子:

   var f1=function (){
     
      };

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

注意:

函数表达式后面,赋值结束后,要加分号

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

 只要是看到一个函数作为参数使用了,那就是回调函数
    function one(fn) {
      console.log("one函数");
      fn();//fn此时应该是一个函数
    }
    function two() {
      console.log("two函数");
    }
    one(two);

函数是可以作为返回值使用的:

  function f1() {
      console.log("f1函数调用了");
      return function () {
        console.log("这是一个函数");
      };
    }
    var ff=f1();//调用
    ff(); //ff就是一个函数了

作用域:使用范围

  • 全局变量:声明的变量是使用var声明的,那么这个变量就是全局变量,全局变量可以在页面的任何位置使用
  • 除了函数以外,其他的任何位置定义的变量都是全局变量
  • 局部变量:在函数内部定义的变量,是局部变量,外面不能使用
  • 全局变量,如果页面不关闭,那么就不会释放,就会占空间,消耗内存
  • 全局作用域:全局变量的使用范围
  • 局部作用域:局部变量的使用范围
  • 块级作用域:一对大括号就可以看成是一块,在这块区域中定义的变量,只能在这个区域中使用,但是在js中在这个块级作用域中定义的变量,外面也能使用;
  • 说明:js没有块级作用域,只有函数除外
  • 隐式全局变量:声明的变量没有var,就叫隐式全局变量
  • 全局变量是不能被删除的,隐式全局变量是可以被删除的
  • 定义变量使用var是不会被删除的,没有var是可以删除的
  • 预解析:就是在解析代码之前
    • 预解析做什么事?
    • 把变量的声明提前了----提前到当前所在的作用域的最上面
    • 函数的声明也会被提前—提前到当前所在的作用域的最上面
函数调用的时候,把会函数的声明提升到作用域的上面
    f1();//调用
    var num=20;//这个变量的声明会提升到变量使用之前
    function f1() {
      console.log(num);
      var num=10;
    }

扩展:

预解析中,变量的提升,只会在当前的作用域中提升,提前到当前的作用域的最上面
函数中的变量只会提前到函数的作用域中的最前面,不会出去
预解析会分段(多对的script标签中函数重名,预解析的时候不会冲突)

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

什么是对象?

  • 看的见,摸得到,具体特指的某个东西

分析对象有什么特点:特征和行为

对象:有特征和行为,具体特指的某一个事物

对象:有属性和方法,具体特指的某个事物

创建对象三种方式:

  1. 调用系统的构造函数创建对象
    var 变量名= new Object(); Object 是系统的构造函数  Array
     var obj = new Object();
    //对象有特征---属性和行为---方法
    //添加属性-----如何添加属性?  对象.名字=值;
    obj.name = "张三";
    obj.age = 23;
    obj.sex = "男";
    console.log(obj.name);//获取--输出了
    console.log(obj.age);
    console.log(obj.sex);
    //方法的调用
    obj.eat();
    obj.play();
    obj.cook();
    //添加方法----如何添加方法? 对象.名字=函数;
    obj.eat = function () {
      console.log("我喜欢吃油炸榴莲凉拌臭豆腐和大蒜");
    };

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

    //自定义构造函数创建对象,我要自己定义一个构造函数,自定义构造函数,创建对象
    //函数和构造函数的区别;名字是不是大写(首字母是大写)
    function Person(name,age) {
      this.name=name;
      this.age=age;
      this.sayHi=function () {
        console.log("我叫:"+this.name+",年龄是:"+this.age);
      };
    }
    //自定义构造函数创建对象:先自定义一个构造函数,创建对象
    var obj=new Person("张三",23);
    console.log(obj.name);
    console.log(obj.age);
    obj.sayHi();

获取属性另一种方法:

obj["name"]="李四";
console.log(obj["name"]);
obj["sayHi"]();

3.字面量的方式创建对象

//字面量创建对象的缺陷: 一次性的对象

    var obj={
      name:"小明",
      age:38,
      sex:"女"
    };
    obj.name="小三";
    console.log(obj.name);
点语法:   对象.名字=值; 对象.名字=函数;

扩展

如何获取该变量(对象)是不是属于什么类型的?
变量 instanceof 类型的名字----->布尔类型,true就是这种类型,false不是这种类型
在当前的对象的方法中,可以使用this关键字代表当前的对象

工厂模式

  • 如何一次性创建多个对象?把创建对象的代码封装在一个函数中
   //工厂模式创建对象
    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("张三",23);
    per1.sayHi();
    //创建一个人的对象
    var per2 = createObject("李四",24);
    per2.sayHi();

小结:

  • 代码(变量)只有执行到这个位置的时候,才知道这个变量中到底存储的是什么,如果是对象,就有对象的属性和方法,如果是变量就是变量的作用
  • 对象没有什么,只要点了,通过点语法,那么就可以为对象添加属性或者方法

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

 json也是一个对象,数据都是成对的,一般json格式的数据无论是键还是值都是用双引号括起来的
    var json = {
      "name": "小明",
      "age": "10",
      "sex": "男"
    };
    //遍历对象,是不能通过for循环遍历,无序
    //key是一个变量,这个变量中存储的是该对象的所有的属性的名字
  var key="name";
  console.log(json[key]);
    //可以通过for-in循环
     for(var key in json){
    console.log(key);//json对象中的属性的名字
    console.log(json[key]);
       }
    //对象中确实有这个属性对象.属性名字  或者对象[属性名字]

简单类型和复杂类型

    原始数据类型: number,string,boolean,undefined, null,object
    基本类型(简单类型),值类型: number,string,boolean
    复杂类型(引用类型):object
    
    空类型:undefined,null
    值类型的值在哪一块空间中存储? 栈中存储
    引用类型的值在哪一块空间中存储?对象在堆上存储,地址在栈上存储

    var num=10;//值类型,值在栈上
    var obj={};//复杂类型,对象在堆,地址(引用)在栈

    值类型之间传递,传递的是值
    引用类型之间传递,传递的是地址(引用)

    值类型作为函数的参数,传递的是值
    引用类型作为函数的参数,传递的是地址
    

js学习中三种对象:
* 内置对象----js系统自带的对象
* 自定义对象—自己定义的构造函数创建的对象
* 浏览器对象—浏览器的

* 内置对象:
* Math
* Date
* String
* Array
* Object

实例对象:通过构造函数创建出来,实例化的对象 静态对象:不需要创建,直接就是一个对象,方法(静态方法)直接通过这个对象名字调用,
new 的执行过程:----->new的时候,系统做了什么事?
* 1. 开辟空间,存储创建的新的对象
* 2. 把this设置为当前的对象
* 3. 设置属性和方法的值
* 4. 返回当前的新的对象

实例方法必须通过实例对象调用
静态方法必须通过大写的对象调用
实例方法---->必须要通过new的方式创建的对象(实例对象)来调用的方法
静态方法---->直接通过大写的构造函数的名字调用的方法(直接通过大写的对象名字调用的)

  • Math 是一个对象,但是不是一个函数
  • Math对象下的属性和方法都是静态
    Math.PI----π---
    Math.E----常数的底数
    Math.abs(值)-----绝对值
    Math.ceil(值)----向上取整
    * Math.Max()---一组数字中的最大值
    * Math.Min()---一组数字中的最小值
    * Math.abs()----绝对值
    * 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();//毫秒
  • String---->是一个对象
  • 字符串可以看成是字符组成的数组,但是js中没有字符类型
  • 字符是一个一个的,在别的语言中字符用一对单引号括起来
  • 在js中字符串可以使用单引号也可以使用双引号
  • 因为字符串可以看成是数组,所以,可以通过for循环进行遍历
  • 字符串特性:不可变性,字符串的值是不能改变
  • 字符串的值之所以看起来是改变的,那是因为指向改变了,并不是真的值改变了 // string ---->字符串类型----基本类型

String---->字符串类型----引用类型

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

基本包装类型

普通变量不能直接调用属性或者方法
对象可以直接调用属性和方法

基本包装类型:本身是基本类型,但是在执行代码的过程中,如果这种类型的变量调用了属性或者是方法,那么这种类型就不再是基本类型了,而是基本包装类型,这个变量也不是普通的变量了,而是基本包装类型对象

好的,基本语法就讲解到这里希望可以帮助大家如有有错的请大家指正,我会及时修改。

猜你喜欢

转载自blog.csdn.net/qq_41961239/article/details/102756858