创建对象的方法及一些方法

一、字面量

{}

let obj = {a:1,b:2}  // obj.a

let obj1 = {'a-b':3} //obj1['a-b']

let obj2 = {1:2,2:3} //obj2[1]//2

let s1 = Symbol();
let s2 = Symbol();
var person = {
[s1]: "Lily",
[s2]: 18,
gender: "female"
};
console.log(person[s2]); // 输出 18

二、new Object

let obj = new Object()

三、构造函数

  • 通过构造函数创建的对象为实例对象,实例对象中的属性和方法称为实例成员
  • 构造函数内部的this就是实例对象,为其动态添加的对象和方法就是实例成员
  • 实例对象的constructor属性指向构造函数
  • instanceof 用于检测实例对象对应的构造函数

实例化执行过程说明:

1.创建新空对象

2.修改构造函数内的this,把this改为实例对象(说明构造函数中的this表示实例对象)

3.执行构造函数代码,给实例对象添加属性

4.返回新对象

其他说明:

构造函数中的返回值问题

1.正常来讲,构造函数中不需要返回值

2.如果构造函数中返回了一个原始类型值(字符串、数字、布尔),无效

3.如果构造函数中返回了一个引用类型的值(对象),则结果就是返回的这个对象了。

4.new Date()中的Date也是一个构造函数,只不过是内置的,类似Date的构造函数,还有:Arra、String、Math、Object……

静态成员:

给构造函数直接添加的属性或方法,叫做静态成员。

  • 静态成员只能由构造函数访问(直接给构造函数添加的)
  • 动态成员只能由实例对象访问(给实例对象添加的)
function Person(){
  // this表示实例对象
  this.name = 'lily'
}
//把构造函数也可当作对象用,可以通过【对象.属性】语法来添加属性或访问属性
//给构造函数直接添加的属性,叫做静态属性
Person.color = 'pink'
console.log(Person.color);//pink

Person.say = function (){
  //给构造函数添加一个静态方法
  console.log('hello');
}
Person.say()

let Jack = new Person()
console.log(Jack.name);//通过【对象.属性】来访问

// 调用静态方法,使用【构造函数.方法()】
// 内置的静态方法有
Math.max()
Math.min()
Math.random()
// ……

内置构造函数

js中最主要的数据类型由数字,字符串,布尔值,null,undefined,对象
数字,字符串,布尔值,null,undefined称为简单数据类型
简单数据类型存在桟区
对象包括数组 和普通对象,也称为引用数据类型
引用数据类型桟区存地址 堆区存数据
数据传递:变量传递给另外一个变量 分为值传递 引用传递
值传递:会把数据复制一份传递(简单数据类型)
引用传递:会把数据地址复制一份传递(引用数据类型)
 

引用类型

Object、Array、RegExp、Date……

Object

这是一个静态方法,使用的时候不用new,不用实例化对象,即不用创建对象。直接通过【构造函数.方法】来使用即可,类似的方法还有Math.max()

  • Object为内置的构造函数 用于创建普通对象
  • Object.keys 静态方法获取对象中的所有键,结果是一个数组
  • Object.values 静态方法获取对象中所有键值,结果是一个数组
  • Object.assgin 静态方法:合并对象,将所有非第一个对象的内容合并到第一个对象中,可以用它来实现对象的(浅)拷贝
    • 语法一:Object.assign(obj,obj1,obj2)
    • 语法二:let obj = Object.assign({},obj1,obj2}
    • 注意:拷贝时,新对象和之前对象时独立的,修改一个,另一个不受影响,如果是对象直接赋值let obj =obj1,则修改一个对象,另一个对象也会受影响。
Array
  • Array内置的构造函数 用于创建数组
  • push 往数组末尾添加元素
  • unshift 往数组最前边添加内容
  • shift 删除数组第一个元素
  • pop 删除数组最后一个元素
  • slice 切片[起始,结束)返回新数组,不影响原数组,起始从0开始,不改变原数组,返回被截切的元素数组
  • splice(start,deleteCount,可选……) 拼接(起始位置,删除的数量,插入增加的元素【可选,插入到起始位置】) 指定删除某个元素【并替换成插入元素】,改变原数组,返回被删除的元素的数组
  • concat 拼接新数组
  • reverse 反转数组的顺序
  • join 将数组变成字符串,用()中符号拼接
  • indexof 用于查找某个元素在数组中首次出现的位置
  • lastIndexOf 用于查找某个元素在数组中尾次出现的索引位置,找不到返回-1
  • sort排序 编码排序,
    //注意:中文、英文按照Unicode编码进行大小比较排序(世界上所有的字符(拉丁文、英文、中文、日文等,包括符号)都对应这一个独一无二的Unicode编码
    let arr=[3,2,11,22,332,12]
    //sort return正数,则不交换两个元素的位置,return负数,则交换两个元素的位置,return0,则什么都不做
    arr.sort((a,b)=>a-b)//升序,a是后一个数,b是前一个数
    console.log(arr);
    arr.sort((a,b)=>b-a)//倒序,a是后一个数,b是前一个数
    console.log(arr);
    arr.sort((a,b)=>Math.random()-0.5) //打乱数组
    console.log(arr);

  • Array.isArray() 判断一个数组是不是真数组,静态方法
  • Array.from(伪数组) 把伪数组转换称真数组,要把伪数组转换成真数组 必须有length属性,静态方法
  • forEach 遍历数组
  • find:用于查找首次出现的满足条件的值,并返回
    • 如果有符合条件的元素,则返回这个元素
    • 如果有多个符合条件的元素,则返回找到的第1个元素,并终止查找
    • 如果没有符合条件的元素,则返回null
  • findIndex:用于查找首次出现的满足条件的值,并返回所在索引值
    • ​​如果有符合条件的元素,则返回这个元素的索引
    • 如果有多个符合条件的元素,则返回找到的第1个元素的索引,并终止查找
    • 如果没有符合条件的元素,则返回-1
  • reduce:可以把数组的元素累加到一起
    • ​​有初始值​​​​​
    • let arr=[3,2,11,22,332,12]
      //let sum = arr.reduce((总和,当前元素)=>{},初始值)
      let sum = arr.reduce((total,curr)=>{
        //因为有初始值,所以起始的时候,total=初始值
        return total +curr //第1次循环 100+3=103,第二次循环 103+2=105 。。。
      },100)
      console.log(sum);

    • 不给初始值
    • let arr=[3,2,11,22,332,12]
      //let sum = arr.reduce((总和,当前元素)=>{},初始值)
      let sum = arr.reduce((total,curr)=>{
        //因为没有初始值,所以起始的时候,total=第一个元素3,curr=第2个元素2
        return total +curr //第1次循环 3+2=5,第二次循环 5+11=16 。。。
      })
      console.log(sum);

  • some:根据给出的条件,判断数组中是否有元素符合条件,如果有一个或者几个元素符合条件,则返回true,如果任何元素都不符合条件则返回false.
    •         
      let arr=[3,2,11,22,332,12]
      let res = arr.some(item=>item>5)//只要数组中有元素大于5,即可得到true
      console.log(res);
  • every 根据给出的条件,判断数组中是否所有元素都符合条件,所有元素都符合条件才返回true,有任何一个元素不符合条件则返回false
    • let arr=[3,2,11,22,332,12]
      let res = arr.every(item=>item>5)//只有数组中所有元素都大于5,才可得到true
      console.log(res);//false

  • filter 筛选数组把满足条件的元素放到新的数组返回
  • map:遍历数组让每个元素执行一遍回调函数,把所有结果都放到一个新数组返回
RegExp

let reg = new RegExp(/abc/)

Date

包装类型

当把字符串、数字这种原始类型,当作对象使用的时候,JS会自动包装他们,把他们包装成对象,然后使用【对象.xxx】这样的语法,如:new String('abc')

Number:
  • toFixed(),保留几位小数,会四舍五入,为了避免精度问题,建议先将小数*百千,算完后再/百千
String:
  • 实例属性 length 用来获取字符串的长度
  • 实例方法 split 用来将字符串拆分成数组
  • 实例方法trim 用于去除字符串两端空白
  • 实例方法 toUpperCase 用于将字母转换成大写
  • 实例方法 toLowerCase 用于将字母转换成小写
  • 实例方法 indexOf 检测是否包含某字符,返回某个指定的字符串值在字符串中首次出现的位置,若是没有找到返回-1。
  • 实例方法 search 检查是否包含某字符串,检索字符串中指定的子字符串,和检索与正则表达式相匹配的子字符串。若是没有找到,返回-1
    • indexOf与search的区别

      search()方法也是一样返回目标子字符串索引值的。indexOf()和search()有什么区别呢?为何时候该使用它,何时该使用search()这个方法呢?

      首先要明确search()的参数必须是正则表达式,而indexOf()的参数只是普通的字符串。indexOf()是比search()更加底层的方法。图片

      若是只是对一个具体字符串来查找检索,那么使用indexOf()的系统资源消耗更小,效率更高;若是查找具备某些特征的字符串(例如查找以a开头,后面是数字的字符串),那么indexOf()就无能为力,必需要使用正则表达式和search()方法了。大部分时候用indexOf()不是为了真的想知道子字符串的位置,而是想知道长字符串中有没有包含这个子字符串。若果返回索引为-1,那么说明没有,反之则有。

  • 字符串截取 :

    • 注意:如果只有一个参数,那么这个索引值位置开始一直截取到最后

    • 实例方法 slice 用于字符串截取[start,end)方法提取字符串的一部分,并将其作为新字符串返回,而不修改原始字符串。
    • 实例方法 substring(start,end) 截取字符串[start,end),不改变原始数组
    • slice与substring的区别
      • substring是以两个参数中较小一个作为起始位置,较大的参数作为结束位置。

      • 当接收的参数是负数时,slice会将它字符串的长度与对应的负数相加,结果作为参数;substring则干脆将负参数都直接转换为0

        var test = 'hello world';
         
        alert(test.slice(-3));         //rld
        alert(test.substring(-3));     //hello world
         
        alert(test.slice(3,-4));       //lo w
        alert(test.substring(3,-4));   //hel

      • 实例方法 substr(start,number):截取字符串(起始位置开始number个)如果长度为负数,将被视为零,已弃用不改变原始数组
  • 字符串其他方法:
    • replace:执行字符串替换    ,第二个参数也可以是方法
      console.log('this is a js'.replace('s','a'));//thia is a js//只找第一个s,然后替换
      console.log('this is a js'.replace(/s/g,'a'));//thia ia a ja//替换所有
      console.log('this is a js'.replaceAll('s','a'));//thia ia a ja//替换所有

    • includes:判断字符串中是否包含某个字符,包含则返回true,不包含则返回false
    • startsWith:判断字符串的开头是什么,如果是则返回true,不是则返回false
    • endsWith:判断字符串的结尾是什么,如果是则返回true,不是则返回false
      • //判断字符串中是否包含某个字符,包含则返回true,不包含则返回false
        console.log('hello'.includes('h'));//true
        console.log('hello'.includes('ell'));//true
        console.log('hello'.includes('h',2));//false,从2的位置往后数,看字符串中是否包含h
        
        //判断字符串的开头是什么,如果是则返回true,不是则返回false
        console.log('hello'.startsWith('h'));//true
        console.log('hello'.startsWith('ell'));//false
        console.log('hello'.startsWith('ll',2));//true,从位置2开始算起,看这段字符串的开头是否是ll
        
        //判断字符串的结尾是什么,如果是则返回true,不是则返回false
        console.log('hello'.endsWith('llo'));//true
        console.log('hello'.endsWith('ll',4));//true,4个长度,意思是先截取4个字符串,然后看这4个字符的结尾是否是ll
        
Boolean

你可能感兴趣的:(js,前端,javascript,开发语言)