js基础篇

71 阅读5分钟

无论干什么,打好基础是关键,今天来谈谈js基础\color{#0000ff}无论干什么,打好基础是关键,今天来谈谈js基础

一、数据类型

1. js数据类型分为两类,基本数据类型和引用数据类型

  • 基本数据类型分为七种:分别是NumberStringBooleanBigIntSymbolNullundefined
  • 引用类型通常用Object代表,数组,正则,日期,Math函数都属于Object

2. 类型转换

(1). 转为Number
  • 调用Number函数

  • 调用parseInt()或parseFloat()

  • 使用算术运算符,除了加法以外的数学运算

    console.log('12' -0)
    console.log('3'*'5') // 15
    console.log('3'*'abc') // 无法转换,输出NaN
    
  • +号

    console.log(+false)
    console.log(+'50')
    
  • toFixed方法num.toFixed(2)

(2). 转为String()
  • 调用toString() var a = 10 console.log(a.toString()) 注意:\color{red}注意:这个方法不适用于null和undefined,因为null和undefined这两个类型的数据中没有方法,调用toString()会报错

  • 调用String()函数,可以把一个变量强制转换为字符串类型 console.log(String(true)) console.log(String(false)) console.log(String(0)) 对于null值,会直接转换为字符串'null',对于undefined会直接转换为'undefined'

  • 任意的数据类型+'' var a = true a=a+''

  • 字符串拼接

    普通的加法运算符,两边出现字符串,会变成拼接

    console.log(true+1) // 2
    
(3). 转换为Boolean()值
  • 使用Boolean()函数,可以把一个变量强制转换为布尔类型 console.log(Boolean(''))

    转换前转换后
    字符串除了空串其余全是true
    数值除了0和NaN其余全是true
    null、undefined都是false
    对象都是true

    代表空、否定的值会被转换为false,eg:'',0,undefined,null,NaN

  • 两次非运算 var a = 'hello' a=!!a //true

3.判断数据类型的方法

(1)typeof

通常用来判断基本数据类型,它返回表示数据类型的字符串(返回结果只能包括number,boolean,string,function,undefined,Object)

注意:\color{red}注意:使用typeof判断null和引用类型返回的结果都是'Object'

(2)instanceof

判断参照对象A的prototype属性所指向的对象是否在被测对象a的原型链上

instanceof只能用来判断两个对象是否属于实例关系,而不能判断一个对象实例具体属于哪种类型

function A(name, age){
    this.name = name
    this.age = age
}
a= new A('张三'18)
console.log(a instanceof B) // true

对于number,string,boolean三种基本数据类型 只有通过构造函数定义例如let num = new Number(1)定义才能检测出

(3)根据constructor判断

constructor是原型对象的属性指向构造函数,解决了instanceof的弊端,可以检测出除了undefined和null的9种类型(因为它两没有原生构造函数)

(4)通过toString.call()方法判断

二、变量声明

  1. var存在变量提升,可以先去声明再去使用,一个变量可多次声明,后面的声明会覆盖前面的声明
  2. const
  • 声明一个只读的变量,声明后,值不能被改变,而且必须初始化
  • 是个全局变量,或者模块内的全局变量
  1. let
  • 不存在变量提升,生命前,该变量不能使用,否则报错。
  • let声明的变量在块级作用域中
  • 不能重复声明

三、js字符串

字符串常用方法

  • indexof(s,n)返回指定的字符串中首次出现的位置
  • lastIndexOf(s,n)返回指定字符串最后出现的位置
  • charAt(n) 返回指定位置的字符串
  • charCodeAt(n) 返回指定位置的字符的Unicode编码
  • slice(m,n) 根据指定位置,截取子串,从m到n,不包括n
  • substring(m,n) 根据指定位置,截取子串,从m到n不包括n
  • substr(m,n)根据指定位置,截取子串,从m位置取,共取n个
  • replace(old,new) 字符串替换
  • split('s') 分割字符
  • search() 检索字符串中指定的子字符串,返回第一个与字符串匹配的索引值
  • match()

四、数组

js数组常用方法

  • Arr.push() 向数字尾部添加一个或多个元素
  • Arr.pop() 删除并返回数组的最后一个元素
  • Arr.unshift() 向数组开头添加一个元素或多个元素
  • Arr.shift() 删除数组的第一项,并返回第一个元素的值
  • Arr.concat() 合并两个或多个数组
  • Arr.join() 将数组的每一项用字符连接成一个新的字符串
  • Arr.reverse() 将数组倒序,原数组改变
  • Arr.sort() 将数组进行排序
// 从小到大
var sortNum = function(a,b){
    return a-b
}
arr.sort(sortNum)
// 从大到小
var sortNum= function(a,b){
    return b-a
}
arr.sort(sortNum)
  • arr.slice() 按条件查找

  • arr.splice(index,len,[item])有3个参数

    index:数组开始下标;
    len:替换/删除的长度;
    item:替换的值,[删除操作]的话item为空;
    
  • arr.forEach() 调用数组的每个元素,并将元素传递给回调函数

注意:\color{red}注意:(1)在forEach中无法删除数组元素

解决方法:1.使用filter筛选符合条件的元素

2.for---改变下标控制遍历

3.逆向循环

  var arr = [2, 3, 5, 7];
  arr = arr.filter(item => item !== 5);
  
  //逆向循环
  var arr = [2, 3, 5, 7];
     for (let i = arr.length - 1; i >= 0; i--) {
      if (arr[i] === 5) {
      arr.splice(i, 1);
      }
 }

(2)forEach()无法在所有元素都传递给调用的函数之前终止遍历

forEach中使用循环无效,达到某一条件,希望跳出循环,代码不继续执行。

  • Arr.filter过滤数组中符合条件的元素并返回一个新数组
  • Arr.every()对每一项进行遍历,都符合返回true
  • Arr.some() 对每一项进行遍历,都不符合返回false
  • Arr.reduce() 接收一个函数作为累加器
  • Arr.includes() 判断一个数组是否包含一个指定的值

原数组改变的方法有:push pop shift unshift reverse sort splice
不改变原数组的方法有:concat map filter join every some indexOf slice forEach