JavaScript:数组、函数和对象

数组(Array)

基本定义

  1. 为什么要用数组
    之前学习的数据类型,只能存储一个值。(字符串为一个值)
    我们想存储多个值的时候可以使用数组。(字符串不方便)
    比如:存储班级中所有学生的姓。
  2. 数组变量可以存放多个数据,好比一个军队,军队里面有很多军人。

数组是什么

  1. 数组是一种引用数据类型,属于对象
    把很多数据装入一个盒子中,用的时候再取出来
    它和普通对象功能类似,也是用来存储一些值得
    不同的是普通对象是使用字符串作为属性名的,而数组是使用数字来作为索引操作元素。
  2. 数组的存储性能比普通对象要好,在开发中我们经常使用数组存储一些数据。

创建数组的方式

  1. 使用Array构造数组
    ① 创建一个空数组
    var arr1 = new Array();
    
    ② 创建一个长度为30的数组
    var arr2 = new Array(30);
    
    ③ 创建一个包含两个字符串的数组
    var arr3 = new Array('凯','kai');
    
  2. 使用数组字面量
    ① 创建一个空数组
    var arr1 = [];
    
    ② 创建一个长度为30的数组
    var arr2 = [];
    arr2.length=20
    
    ③ 创建一个包含两个字符串的数组
    var arr3 = ['凯','kai'];
    

原理

在这里插入图片描述
在这里插入图片描述
数组存储的数据可以是任何类型(数字、字符、布尔值等)

常用操作

  1. length :求数组的长度
    数组的长度=数组名.length
    可以通过修改数组的长度来改变数组中元素的个数,如果改小了,数组从后面删除元素。(伪数组的长度可以修改,但是不能修改里面的元素)
  2. 获取数组中的元素
    ① 数组中的指定元素 = 数组名[索引值]
    ② 数组的索引代表的是数组中的元素在数组中的位置,从0开始
    ③ 如果获取数组中的元素是,数组名[索引值],没有指定索引(元素没有那么多),系统不
    报错,而是给定值为undefined

数组常用API

  1. instanceof 是一个关键字。判断A是否是B类型。
    布尔类型值 = A instanceof B
    var a = [1, 2, '哈哈哈'];
    console.log(typeof a);
    console.log(a instanceof Array);
    console.log(a instanceof Object);
    
    运行结果:
    在这里插入图片描述
    instanceof和typeof的区别
    typeof是直接获得类型原型链的最顶层,
    instanceof比较的时候,只要是原型链上的上层,不论哪一层,返回都是true
  2. Array.isArray(a) 判断a是不是个数组
    布尔类型值 = Array.isArray(变量)
    调用者:Array
    参数:变量(被检测值)
    返回值:布尔类型
    var a = [1, 2, '哈哈哈'];
    varb = 'KaiSarH';
    console.log(Array.isArray(a));
    console.log(Array.isArray(b));
    
    运行结果:
    在这里插入图片描述
  3. toString() 把数组转换成字符串,每一项用逗号分割
    字符串= 数组.toString()
    var a = [1, 2, '哈哈哈'];
    console.log(a.toString());
    console.log(typeof a.toString());
    
    运行结果:
    在这里插入图片描述
  4. valueOf() 返回数组对象本身
    var a = [1, 2, '哈哈哈'];
    console.log(a.valueOf());
    
    运行结果:
    在这里插入图片描述
  5. join(变量) 用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。默认为逗号。
    字符串 = 数组.join(变量)
    var a = [1, 2, '哈哈哈'];
    console.log(a.join('?'));
    console.log(typeof a.join('?'));
    
    运行结果:
    在这里插入图片描述

函数(Function)

定义一个函数后,deal代表这个函数,deal()代表这个函数的执行结果。
function deal(){
	alert('123');
}

定义

函数也是一个对象
函数就是可以重复执行的代码块
函数就是完成特定功能的一段代码
使用typeof检查一个函数对象时,会返回function

作用

① 因为一部分代码使用次数可能会很多,所以封装起来,需要的时候直接调用就可以了,将复杂事情简单化,将重复使用的代码进行统一封装。
② 特点
Ⅰ. 封装到函数中的代码不会立即执行
Ⅱ. 函数中的代码会在函数调用的时候执行
Ⅲ. 调用函数 语法:函数对象()
Ⅳ. 调用函数时,函数中封装的代码会按照顺序执行

基本使用

① 不常用

var fun = new Function("console.log('大家好,我是函数');");

② 常用
Ⅰ. 函数定义
Ⅱ. 函数调用

常见的声明方式

① 函数声明方式

function sum(a, b){
	console.log(a + b);
}
sum(10, 20);

② 函数表达式声明方式

var sum = function(a, b){
	console.log(a + b);
}
sum(10, 20);

③ 使用Function构造函数

var add = new Function('num1','num2','return num1 + num2');

不推荐使用,主要时用于面向对象时理解函数就是对象,函数名就是指针这一概念。

函数的参数

① 为什么设置参数
为了增强函数的功能性和函数的可拓展性,便于交互
② 形参
形式上参与运算的变量,无实际值,为实参占个位置,就像一个躯壳一样。

function f(a,b){}; //a,b就是形参,占位用,函数定义时形参无值

③ 实参
实际上参与运算的变量,形参为他占位置,真是参与运算的变量。

f(x,y); //x,y实参,有具体的值,会把x,y复制一份给函数内部的a和b,函数内部的值时复制的新值,无法修改外部的x,y

④ 注意
在其他语言中,实参个数必须和形参个数一致,但是JavaScript中没有函数签名的概念,实参个数和形参个数可以不相等。

函数使用注意

① 在调用函数时,可以在()中指定实参,实参将会赋值给函数中对应的形参
② 调用函数时解析器不会检查实参的类型,所以开发中一般需要对参数进行类型的检查
③ 函数的实参可以是任意的数据类型
④ 调用函数时,解析器不会检查实参的数量,多余实参不会被赋值,如果实参数量少于形参的数量,则没有对应实参的形参将会是undefined

arguments对象

function sum(num1, num2) {
      console.log(arguments);
   }
   sum()
   sum(100, 200)
   sum(100, 200, 300, 400, 500);

在这里插入图片描述
使用arguments.length可以获取传入实参的个数
使用arguments.callee指向函数本身
使用arguments获得函数的实参


   function sum() {
       var value=0;
       for (var i = 0; i < arguments.length; i++) {
           value += arguments[i];
       }
       console.log(value)
   }
   sum(10,20,30);

运行结果:
在这里插入图片描述

length属性 :返回函数形参的个数

判断函数形参和接收到的实参个数是否相等?

fun sum(num1, num2){
	if(arguments.length===sum.length)
		console.log(num1+num2)
}
sum(1,2,3,4);

arguments.length 获得全部实参的个数
sum.length 获得形参的个数

函数返回值(return)

① 定义
当一个函数被调用,通常会从函数的开始执行到结束。如果想提前结束该函数的执行可以使用return语句,return语句后面的所有语句将永远不会执行。
一般用于返回结果。
② 注意
Ⅰ. 如果函数没有显式的使用return语句,那么函数有默认的返回值:undefined
Ⅱ. 如果函数使用return语句,那么跟在return后面的值,就成了函数的返回值
Ⅲ. 如果函数使用return语句,但是return后面没有任何值,那么函数的返回值也是:undefined
Ⅳ.推荐的做法是要么让函数始终都返回一个值,要么不要有返回值。

🍖🍖🍖函数直接声明还函数表达式声明的区别

// 函数声明
function fsum(){

}
//函数表达式声明
var sum = function(){

}
  1. 函数声明必须有函数名,而函数表达式的函数名可以省略
  2. JavaScript解析器首先会把当前作用域的函数声明提前到整个作用域的最前面.也就是说只要在代码中写了函数声明,不管在哪里声明,代码中所有位置都可以调用。如果使用函数表达式对函数进行声明,则会把变量的声明提前,也就是说只能在函数定义之后使用该变量调用函数。

匿名函数

  1. 定义 : 没有命名的函数
  2. 作用
    ① 用在绑定事件的时候
    document.onclick = function(){
    	alert(1);
    }
    
    ② 定时器
    setIntervak(function(){
    	console.log('每秒爱你1遍!');
    },1000);
    
    ③ 立即执行函数 | 闭包
    (函数)(参数)
    
    (function(num1, num2){
    	console.log(num1, num2);
    })(1, 2)
    

函数是一种数据类型

function fn(){}
console.log(typeof fn);	//function
console.log(typeof fn());//undefined

归根结底,它还是属于object

回调函数

  1. 回调函数就是一个通过函数调用的函数
  2. 如果你把函数的指针(地址)作为参数传递给另外一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
    // 回调函数
    // 加减乘除函数
    function add(num1, num2) {return num1 + num2;}
    function sub(num1, num2) {return num1 - num2;}
    function mul(num1, num2) {return num1 * num2;}
    function divide(num1, num2) {return num1 / num2;}
    // 计算器函数
    function cal(num1, num2, func) {
        return func(num1, num2)
    }
    // 使用
    var result1 = cal(10, 20, add);
    var result2 = cal(10, 20, sub);
    var result3 = cal(10, 20, mul);
    var result4 = cal(10, 20, divide);
    
    console.log(result1);
    console.log(result2);
    console.log(result3);
    console.log(result4);
    
    执行结果:
    在这里插入图片描述
  3. 一般用于递归

变量的作用域

  1. 作用域:变量可以起作用的范围

  2. 全局变量:在任何地方都可以访问到的变量就是全局变量;对应全局作用域

  3. 局部变量:只在固定的代码片段内可访问到的变量,最常见的例如函数内部;对应局部作用域(函数作用域)
    局部变量,现在函数内部的作用于找变量,找到则使用,找不到去父级作用域找变量。

  4. 注意
    ① 不使用var声明的变量是全局变量,不推荐使用(XXXX)
    ② 变量退出作用域之后会销毁,全局变量关闭网页或浏览器才会销毁

  5. 块级作用域
    ① 任何一对花括号{}中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域
    ② 在ES5之前没有块级作用域的概念,只有函数作用域

  6. 作用域链
    ① 概念
    只有函数可以制造作用域结果,那么只要是代码,就至少有一个作用域 即全局作用域
    凡是代码中有函数,那么这个函数就构成另一个作用域
    如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
    在这里插入图片描述
    ② 其它语言中变量i只能在for循环内部访问(局部变量)
    ③ 在ES5中,只有函数会产生作用域

  7. 预解析
    ① 概念
    JS代码的执行是由浏览器中的JS解析器来执行的
    JS解析器执行JS代码的时候,分为两个过程:预解析过程和代码执行过程
    ② 预解析过程
    Ⅰ. 把变量的声明提升到当前作用域的最前面,只会提前声明,不会提前赋值
    Ⅱ. 把函数的声明提升到当前作用域的最前面,只会提前声明,不会提前调用
    Ⅲ. 先提升var,再提升function

  8. 变量提升
    ① 变量提升:定义变量的时候,变量的声明会被提升到作用域的最上面,变量的赋值不会提升
    ② 函数提升:JS解析器首先会把当前作用域的函数声明提前到整个作用域的最前面

  9. 面试相关

    var str1='郇';
    fn1();
    function fn1() {
        console.log(str1);
        var str1 = '凯';
    }
    

    执行结果:在这里插入图片描述

    var num1 = 10;
    fn2(); 
    function fn2() {
        var num2 = 20;
        console.log(num1);
        console.log(num2);
        var num1 = '12306';
    }
    

    运行结果:在这里插入图片描述

    fn3();
    console.log(num1);
    console.log(num2);
    console.log(num3);
    function fn3(){
        var num1 = num2 = num3 = 100;
        console.log(num1);
        console.log(num2);
        console.log(num3);
    }
    

    运行结果:
    在这里插入图片描述

    fn3();
        // console.log(num1);
        console.log(num2);
        console.log(num3);
        function fn3(){
            var num1 = num2 = num3 = 100;
            console.log(num1);
            console.log(num2);
            console.log(num3);
    
        }
    

    运行结果:在这里插入图片描述
    也就是说,没有用var定义的变量是全局变量。

对象(Object)

JS中为什么要用对象

function logLike(name, intro, college, site, chat, phone){

   }

   function logLike(liao) {
       console.log(liao.name);
       console.log(liao.intro);
       console.log(liao.college);
       console.log(liao.site);
       console.log(liao.chat);
       console.log(liao.phone);
   }

函数的参数如果特别多的话,可以使用对象简化

什么是对象

① 生活中,万物皆对象,对象是一个具体的事物,一个具体的事物就有有行为和特征。比如:一部手机,一台电脑。
②类和对象
Ⅰ. 类:描述一类事物,相当于“设计图纸”。JavaScript中可以自定义类,同时也提供了一个默认的类Object。比如:手机是一类事物,称为手机类;我们手上的iPhone手机才是真正的对象。
Ⅱ. 对象:描述一个具体的事物,相当于“成品”。有自己的特征和行为。

JS中的对象

JS中的对象是无序属性的集合,其属性可以包含基本值、对象或者函数
对象就是一组没有顺组的值,由一组组键值对构成
事物的特征在对象中用**属性**来表示
事物的行为在对象中用**方法**来表示

JS中对象的分类

① 内建对象/内置对象
由ES标准中定义的对象,在任何ES的实现中都可以使用
比如:String Number Boolean Function Object Math
② 宿主对象
由JS的运行环境提供的对象,现在主要指由浏览器提供的对象
比如:BOM对象 DOM对象
③ 自定义对象
自己创建的对象
比如:Person Dog

对象字面量

① 字面量 10086 ‘itlike’ true null undefined [] {}

常见创建对象方式

① 对象字面量

var x1={
       // 属性
       name:'kai',
       age:22,
       sex:'男',
       height:1.80
       // 行为
       doIt:function () {
           console.log('asd');
       }
   };

劣势 :内容率先定义,不易修改。

② new Object()创建对象

var kai = new Object();
    kai.name = 'jaunty';
    kai.age = 22;
    kai.sex = '男';

劣势:虽然容易修改内容,但是不易量产。

③ 工厂函数创建对象

function cretePerson(name, age, sex) {
       var p = new Object();
       p.name = name;
       p.age = age;
       p.sex = sex;
       p.doIt = function () {
           console.log('我会写代码')
       };
       return p;
   }
   
   kai = cretePerson('kai',22,'男');
   hui = cretePerson('hui',21,'女');

劣势:虽然容易量产,但是都是由Object产生的,无法描述一种具体的对象。

④ 自定义构造函数

function Person(name, age, sex) {
       this.name = name;
       this.age = age;
       this.sex = sex;
       this.doIt=function () {
           console.log('我会写代码')
       }
   }
   var kai = new Person('kai', 21, '男');
   
   function Dog(kind, sex, height) {
       this.kind = kind;
       this.sex = sex;
       this.height = height;
       this.run=function () {
           console.log('跑快快');
       }
   }
   var jm = new Dog('jinmao', '1', 0.5)
   jm.run()

运行结果:
在这里插入图片描述
自定义对象构造函数解决了量产、创建不同对象的问题

属性和方法

① 属性 :如果一个变量属于一个对象所有,那么该变量就可以称之为该对象的一个属性,属性一般是名词,用来描述事物的特征。
② 方法 :如果一个函数属于一个对象所有,那么该函数就可以称之为该对象的一个方法,方法一般是动词,用来描述事物的行为和功能。

new关键字

① 概念:new关键字一般和构造函数一起配合使用
② 构造函数:构造函数,是一种特殊的函数。构造函数用于创建一类对象,首字母要大写。构造函数要和new一起使用才有意义。
③ new做了哪些事????
Ⅰ. new现在内存中创建一个新的空对象
Ⅱ. new会让this指向这个新的对象
Ⅲ. 执行构造函数,给这个新对象增加属性和方法
Ⅳ. 返回这个新对象(return this)
在这里插入图片描述

this关键字

① 概念 :this是一根指针
② 几个特点
Ⅰ. 普通函数执行,内部this指向全局变量window
Ⅱ. 函数在定义的时候this是不确定的,只有在调用的时候才可以确定
Ⅲ. 如果函数作为一个对象的方法,被该对象调用,name函数内的this则指向该对象
Ⅳ. 构造函数中的this是一个隐式对象,类似于一个初始化的模型。所有方法和属性都挂载到了这个隐式对象上,后续通过new关键字来调用,从而实现可例化

对象使用

var x1={
       // 属性
       name:'kai',
       age:22,
       sex:'男',
       height:1.80,
       // 行为
      doIt:function () {
          console.log('123');
      }
   };

① 访问对象的属性

console.log(x1.name);
console.log(x1['name']);

在这里插入图片描述
② 遍历对象的属性

for(var key in x1){
      console.log(key + ':' + x1[key]);
   }

在这里插入图片描述
③ 删除对象的属性 : 使用delete关键字

for(var key in x1){
    console.log(key + ':' + x1[key]);
}
delete x1.age;
delete x1.doIt;
for(var key in x1){
    console.log(key + ':' + x1[key]);
}

在这里插入图片描述
④ 增加、修改对象的属性:直接进行赋值操作

x1.frient=['xiao','hui'];
x1.age = 24;
for(var key in x1){
    console.log(key + ':' + x1[key]);
}

在这里插入图片描述

基本类型和引用类型在堆栈中的表示

① 基本数据类型
基本数据类型又叫做值类型,在存储时,变量中存储的是值本身,因此叫做值类型
String Number Boolean Null Undefined

② 引用数据类型
复杂数据类型,在存储时,变量中存储的仅仅是地址(引用),因此叫做引用数据类型
Object
多个变量指向一个复杂数据类型,只要一个变量发生变化,所有的都会变化。
③ 区别
JS中的变量都是保存到栈内存中的,基本数据类型的值直接在栈内存中存储,值与值之间是独立存在的,修改一个变量不会影响到其他变量
对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟一个新的内存空间,而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当一个通过一个变量修改属性时,另一个也会受到影响

④ 堆和栈
(操作系统):由操作系统自动分配释放,存放函数的参数值,局部变量的值等
(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收
注意:JS中没有堆和栈的概念,我们用堆和栈来讲解,目的是方便理解,存放方式是一样的
⑤ 画图分析
Ⅰ. 基本类型在内存中的存储

在这里插入图片描述
Ⅱ. 复杂类型在内存中的存储
在这里插入图片描述
Ⅲ. 基本类型作为函数的参数 也是存放在堆区
在这里插入图片描述
Ⅳ. 复杂类型作为函数的参数
在这里插入图片描述

内置对象

概念

JavaScript提供多个内置对象:String、Math、Array、Date…

Array对象

① 检测一个对象是否是数组
Ⅰ. instanceof

var arr = ['张三','李四'];
console.log(arr instanceof Array);
console.log(arr instanceof Object);

弊端:Array的原型链父代也会返回true
在这里插入图片描述
Ⅱ. Array.isArray()

var arr = ['张三','李四'];
console.log(Array.isArray(arr));

②toString() / valueOf()
toString() 把数组转换成字符串,逗号分隔每一项
valueOf() 返回数组对象本身
③ sort()
Ⅰ. 使用
sort()方法用于对数组的元素进行排序,默认是按照字符编码的顺序进行排序
如果想按照其它标准进行排序,就需要提供比较函数,该函数需要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字,比较函数应该具有两个参数a和b,其返回值如下:
若a小于b,在排序后的数组中a应该出现在b之前,则返回一个小于0的值
若a等于b,则返回0
若a大于b,则返回一个大于0的值

var arr =[10,1,5,100,50];
   arr.sort(function (a, b) { 
       return a-b; //升序
       // return b-a; //降序
   })

Ⅱ. sort()的内部实现

/**
    *  sort内部的实现
    * @param {Array}array
    * @param {Function}fnCompare
    */
   function sort(array, fnCompare) {
       //控制循环次数
       for (var i = 0; i < array.length - 1; i++) {
           // 标记 是否完成排序
           var sortFlag = true;
           //控制比较次数
           for (var j = 0; j < array.length-1-i ; j++) {
               if (fnCompare(array[j], array[j+1])>0){
                   sortFlag = false;
                   // 交换位置
                   var temp = array[j];
                   array[j] = array[j+1];
                   array[j+1] = temp;
               }
           }
           // 判断
           if (sortFlag){
               break;
           }
       }
   }
   var arr = [10, 20, 5, 100, 50];
   function sortNumber(a, b) {
       return a-b;
   }
   sort(arr, sortNumber);
   console.log(arr);

④ map()
Ⅰ. 使用
映射(一一对应),[].map() 基本用法和forEach()方法类似。array.map(callback,[thisObject]);
但是callback需要有return值(如果没有,就会返回undefined)
首先遍历数组,然后在回调函数中按照自己的规则返回新的数组。
Ⅱ. 操作

var arr = [10, 20, 5, 1000, 50];
var newArr = arr.map(function (value, index, array) {
    return value*2;
});
console.log(newArr);

运行结果:
在这里插入图片描述
⑤ filter()
Ⅰ. 使用:过滤筛选
callback在这里担当的是过滤器的角色,当元素符合条件,过滤器就会返回true,儿filter则会返回所有符合过滤条件的元素
Ⅱ. 操作

var arr = [1, 2, 3, 4, 5, 6, 7, 8];
   var newArr = arr.filter(function (value, index, array) {
       return value % 2 === 0 && value > 5;
   });
   console.log(newArr);

运行结果:
在这里插入图片描述
⑤ every(且)
Ⅰ. 使用
every(callback[,thisObject])当数组中每一个元素在callback上都返回true时就返回true
Ⅱ. 操作

var arr = [11, 2, 3, 4, 15];
   var result = arr.every(function (value, index, array) {
       return value>1;
   });
   var result1 = arr.every(function (value, index, array) {
       return value>4;
   });
   console.log(result, result1);

运行结果:
在这里插入图片描述
⑤ some(或)
Ⅰ. 使用
some(callback[,thisObject])当数组中有元素在callback上都返回true时就返回true
Ⅱ. 操作

var arr = [11, 2, 3, 4 ,15];
   var result = arr.some(function (value, index, array) {
       return value < 10;
   });
   var result1 = arr.some(function (value, index, array) {
       return value < 0;
   });
   console.log(result);
   console.log(result1);

运行结果:
在这里插入图片描述
⑥ 常用方法

方法描述
concat()连接两个或更多的数组,并返回结果。
join()把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。默认用逗号。
pop()删除并返回数组的最后一个元素。
push()向数组的末尾添加一个或更多元素,并返回新的长度。
shift()删除并返回数组的第一个元素。
unshift()向数组的开头添加一个或更多元素,并返回新的长度。
reverse()颠倒数组中元素的顺序。返回新的数组,不会对原有数组产生影响。
slice()从某个已有的数组返回选定的元素。
sort()对数组的元素进行排序。
splice()删除元素,并向数组添加新元素。
toSource()返回该对象的源代码。
toString()把数组转换为字符串,并返回结果。
toLocaleString()把数组转换为本地数组,并返回结果。
valueOf()返回数组对象的原始值。
indexof()从指定位置开始找第一个为指定值的下标
lastIndexOf()反向执行indexOf()
forEach()遍历数组

Math对象

  1. 概念:Math对象不是构造函数,它具有数学常数和函数的属性和方法,都是以静态成员的方式提供。
  2. 常用方法
    ① Math.PI //圆周率
    ② Math.random() //生成随机数
    Math.random() * (y-x) +x
    //生成x-y的随机数
    
    ③ Math.floor() / Math.ceil() //向下取整/向上取整
    ④ Math.rount() //取整,四舍五入
    ⑤ Math.abs() //绝对值
    ⑥ Math.max() / Math.min() //求最大最小值
    ⑦ Math.sin() / Math.cos() //正弦/余弦
    ⑧ Math.power() / Math.sqrt() //求指数次幂/求平方根
  3. 静态成员和实例成员
    ① 静态成员:直接使用对象来调用
    ② 实例成员:构造函数中的成员就是实例成员。实例也称为对象。

String对象

  1. 概念:字符串所有的方法,都不会修改字符串本身(字符串本身是不可变得),操作完成后会返回一个新的字符串
    性能问题:拼接大量字符串的时候,会有性能问题
    选择服务器渲染,模板引擎

  2. 常用方法
    ① 获取字符串中字符的个数:str.length
    ② 字符方法
    Ⅰ. charAt() 获取指定位置处字符
    Ⅱ. charCodeAt() 获取指定位置处字符的ASCII码
    Ⅲ. str[]下标获取 HTML5,IE8+支持和charAt()等效
    ③ 字符串操作方法
    Ⅰ. concat() 拼接字符串,等效于+,+更常用
    Ⅱ.slice() 从start位置开始,截取到end位置,end取不到
    Ⅲ. substring() 从start位置开始,截取到end位置,end取不到
    Ⅳ. substr() 从start位置开始,截取length个字符

    截取网页、图片后缀
    var str = 'www.baidu.com'
    var newStr = str.substr(str.lastindexOf('.'))
    

    ④ 位置方法
    Ⅰ. indexOf() 返回指定内容在原字符串中的位置
    Ⅱ. lastIndexOf() 从后往前找,只找第一个匹配的
    ⑤ 去除空白:trim() 只能去除字符串前后的空白
    ⑥ 大小写转换方法
    Ⅰ. 转小写 toLowerCase()
    Ⅱ. 转大写 toUpperCase()
    ⑦ 其他
    Ⅰ. search()
    Ⅱ. split()

  3. URL转化成对象

    var url = 'http://www.KaiSarH.com/user?name=xl&psd=lover&sex=女&age=22';
    function getUrlParams(url) {
        // 起点
        var index = url.indexOf('?')+1;
        // 截取
        var params = url.substr(index);
        // 分隔
        var paramsArr = params.split('&');
        var obj = {};
        paramsArr.forEach(function (value, index1, array) {
            var tempArr = value.split('=');
            var key = tempArr[0];
            obj[key] = tempArr[1];
        });
        return obj;
    }
    var obj = getUrlParams(url);
    console.log(obj);
    console.log(obj.name);
    

    运行结果:
    在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KaiSarH

如果觉得文章不错,可以支持下~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值