自学内容网 自学内容网

JavaScript:对象

七.对象

7.1初识对象

7.1.1 什么是对象

JavaScript中的所有事物都是对象:如字符串、数值、数组、函数等......

在这些之外,JavaScript允许自定义对象

对象是带有属性方法特殊数据类型。

7.1.2对象的特征

定义变量name来描述学生的姓名。

定义变量age来描述学生的年龄。

定义变量sex来描述学生的性别等。

但是,当需要描述多个学生时,如果每个学生的姓名、年龄和性别都通过变量来描述,会 使程序出现大量的变量,导致程序难以维护。 此时,我们可以通过 JavaScript 中的对象(一种数据类型)来描述学生,将学生的特征保 存在对象中。

7.1.3属性和方法

对象只是一种特殊的数据,对象拥有属性方法

在 JavaScript 中,对象属于复杂数据类型,它是由属性和方法组成的一个集合。

属性是指对象的特征。

方法是指对象的行为。

a.访问对象的属性

属性是与对象相关的值。  .属性没有括号

访问对象属性的语法为:

   objectName.propertyName

例子:

这个例子使用了 String 对象的 length 属性来获得字符串的长度:

 <script>
        var message="Hello World!"
        var x=message.length
        console.log(x)
    </script>

b.访问对象的方法

方法是能够在对象上执行的动作。     .方法()有括号         

可以通过以下语法来调用方法:

    objectName.methodName()

例子:

这个例子使用了 String 对象的 toUpperCase() 方法来将文本转换为大写:

<script>
        var message="Hello World!"
        var x=message.toUpperCase()
        console.log(x)
    </script>

7.2对象的创建

通过JavaScript,能够定义并创建自己的对象

创建新对象常见的三种不同的方法:

a. 利用字面量创建对象

b. 使用Object()定义并创建对象

c. 使用构造函数来定义对象

创建新对象不常见的三种方法

a.原型对象(prototype关键字)

b.混合模式(原型和构造函数)

c.动态原型的方式

7.2.1使用字面量创建对象

在 JavaScript 中,使用对象的字面量创建对象,就是用大括号“{}”来标注对象成员,每个对象成员使用键值对的形式保存,即 “key: value”的形式。

对象字面量的语法格式如下。

 *注:当对象不需要成员时,键值对可以省略,此时表示空对象

(1)使用对象成员

案例演示:

<script>
        var obj={}           //创建空对象
        var stu1={               //创建一个学生对象
            name:'小明',              //创建对象属性
            age:18,                            …
            sex:'男',                             …
            sayHello:function(){                    //创建对象属性
                console.log('Hello')
            }
        }
        console.log(stu1.name)
        stu1.sayHello()

        console.log(stu1['age'])
        stu1['sayHello']()
        </script>

使用对象成员的两种方式:

  1. 使用 ”.” 访问对象成员
  2. 使用 “[]” 访问对象的成员

如果对象的成员名中包含特殊字符,则可以用字符串来表示成员名,通过“[]”来访问,示例代码如下 。

(2) 添加对象成员

添加对象成员:对象创建完成后,用户可以通过为属性或方法赋值的方式来添加对象成员。

<script>
        var obj1={}            
        var obj={}
        obj.name='Jack'          //为对象添加name属性
        obj['age']=18            //为对象添加age属性
        obj.sayHello=function(){         //为对象添加sayHello()方法
            console.log('Hello')
        }
        obj['sing']=function(){              //为对象添加sing()方法
            console.log('我爱你中国')
        }

        console.log(obj.name)           //访问name属性,输出:jack
        console.log(obj.age)            //访问age属性,输出:18

        obj.sayHello()           //调用sayHello()方法,输出:hello
        obj.sing()              //调用sing ()方法,输出:我爱你中国
    //如果访问对象中不存在的成员时,会返回 undefined
        console.log(obj1.name)   //访问obj1中的name属性,没有被定义
    </script>

7.2.2利用 new Object()创建对象

在JavaScript中,几乎所有的对象都是Object类型的实例,它们都会从Object.prototype继承属性和方法。

Object构造函数创建一个对象包装器。

Object 构造函数,会根据给定的参数创建对象,具体有以下情况:

a.如果给定值是null或undefined,将会创建并返回一个空对象

b.如果传进去的是一个基本类型的值,则会构造其包装类型的对象。

c.如果传进去的是引用类型的值,仍然会返回这个值,经他们复制的变量保有和源对象相同的引用地址。

当以非构造函数形式被调用时,Object 的行为等同于 new Object()

  语法格式:

  //以构造函数形式来调用

  new Object([value])

value可以是任何值

以下示例使用Object生成布尔对象:

//等价于o=new Boolean(true)

var o=new Object(true)

例子:

<script>
    person=new Object()
    person.firstname='Jhon'
    person.lastname='Doe'
    person.age=50
    person.eyecolor="blue"
    console.log("姓氏是:"+person.firstname+"名字是:"
    +person.lastname+"年龄是:"+person.age+"眼睛的颜色是:"+person.eyecolor)
   </script>

例子:

<script>
    var obj=new Object()
    obj.name='小明'
    obj.age=18
    obj.sayHello=function(){
        console.log('Hello')
    };
    console.log(obj.name)
    obj.sayHello()
    console.log(obj.age)
   </script>

 也可以使用对象字面量来创建对象,语法格式如下:

var  myObject={

key1:value1,

key2:value2,

//更多键值对….

}

*注:

a. myObject: 变量名,用于引用整个对象。

b. key1, key2: 属性名称,可以是字符串或标识符

c. value1, value2: 属性的值,可以是任意 JavaScript 数据类型,包括数字、字符串、布尔值、函数、数组、甚至其他对象

7.2.3使用函数构建对象

JavaScript中,this通常指向的是我们正在执行的函数本身,或者是指向该函数所属的对象(运行时)

在构造函数的函数体中可以为新创建的对象添加成员,其语法格式如下  

var 变量名 = new 造函([参数1, 参数2, …]);

例子: 

<script>
        function Person(name){
           // 添加实例成员:name属性和say()方法 
           this.name=name
           this.say=function(){
            console.log('Hello')
           } 
        }
           // 添加静态成员:class属性和run()方法 
           Person.class='102班'
           Person.run=function(){
            console.log('run')
           }
           // 使用静态成员
           console.log(Person.class)
           Person.run()
            // 使用实例成员 
            var p1=new Person('小明')
            console.log(p1.name)
            p1.say()
       </script>

7.3对象的遍历

在开发中,有时需要查询一个对象拥有哪些属性和方法,这时就需要进行对象的遍历。

对象的遍历是指遍历对象中所有的成员。

使用 for…in 语法可以进行对象的遍历,其语法格式如下。

 for in 循环遍历对象自身的和继承的可枚举属性(循环遍历对象自身的和继承的可枚举属性(不含Symbol属性).)

<script>
        var obj={0:'a',1:'b',2:'c',3:'d'}
        for(var i in obj){
            console.log(i+':'+obj[i])
        }
    </script>

7.3.1值类型和引用类型

javascript中变量类型分为值类型(基本数据类型)和引用类型
值类型:String(字符串)Number(数值)Boolean(布尔值)UndefinedNull
引用类型:Array(数组)Object(对象)Function(函数)

值类型和引用类型的区别

(1) 存储位置不一样

值类型占用空间固定,保存在栈中,保存与复制的是值本身,可以使用 typeOf()检测值的类型.

引用类型占用空间不固定,保存在堆中,保存与复制的是指向对象的一个指针,需要使用 instanceof() 检测数据类型,使用 new() 方法构造出的对象是引用型.

(2) 复制方式不一样

值类型的变量直接赋值就是深复制,如 var a = 10; var b = a;那么a的值就复制给b了,b修改值不会影响a,两份数据在内存中是完全独立的。

引用类型的变量直接赋值实际上是传递引用,只是浅复制.是将变量中的存储的地址赋值一份单独存储,但是两个变量中修改其中一个对象,另外一个引用来访问的时候,也会访问到修改后的值。

(3) 值类型无法添加属性和方法,引用类型可以添加属性和方法。

(4) 值类型的比较是值的比较,只有当它们的值相等的时候它们才相等。引用类型的比较是引用地址的比较

比较的时候注意双等号在做比较的时候做了类型转换,而全等号是值和类型相等是才能相等.

<script>
        // 值类型
        var  num = 10;
        function print(num) {
          num = 100;
          console.log(num);  // 100
        }
        console.log(num);   // 10

        // 引用类型
        var obj = {
            name: 'jone'
        }
        function printObj(obj) {
            obj.name = 'lucy';
            console.log(JSON.stringify(obj));  // {"name":"lucy"}
        }
        console.log(JSON.stringify(obj));  // {"name":"lucy"}
    </script>

7.4 常用的内置对象

常用的内置对象有四种:

a. 数值对象:Math

b. 日期对象:Date

c. 数组对象:Array

d. 字符串对象:String

7.4.1Math对象

Math对象表示数学对象,进行数学相关的运算。

1.Math常用属性及方法

(1)PI获取圆周率,可以计算半径为5的圆的周长

console.log(2*Math.PI*5);

输出结果为:31.415926

(2)abs()可以计算-5的绝对值

console.log(Math.abs(-5));

输出结果为:5

(3)max()和min()可以计算“1  3  7  18”里的最大值最小值

console.log(Math.max(1  3  7  18);

console.log(Math.min(1  3  7  18);

输出结果分别为18 1

(4)pow()可以计算5的2次幂,然后可以用sqrt()进行求平方根

var w = Math.pow(5,2);

console.log(w);

console.log(Math.sqrt(w));

输出结果为25  5

(5)random()随机生成一个大于等于0小于1的数

console.log(Math.random());

输出结果为 0.5874362

接下来让我们通过一个案例来掌握Math知识点

案例:猜数字游戏

随机抽一个1到10之间的数字,猜对了提示你猜的真准,猜大了提示你猜的数字大了,猜小了提示你猜的数字小了。

<script>
// 生成随机整数的函数
// 使用Math.random()生成一个0到1之间的随机数(不包括1),然后乘以(max - min + 1),得到一个0到(max - min + 1)之间的随机数(不包括(max - min + 1)),最后通Math.floor()向下取整并加上min,确保结果在min到max之间(包括min和max)
        function getRandom(min, max) {
            return Math.floor(Math.random() * (max - min + 1)) + min;
        }
        // 获得1到50的随机整数
        var random = getRandom(1, 50);
        var flag = 0;               
// 初始化一个计数器flag,用来记录玩家已经猜了多少次。
        // 使用while (true)创建一个无限循环,
        // 游戏会一直进行直到玩家猜对数字或者用完5次机会。
        while (true) {
            var num = prompt('请猜一个1-50的数字:');
            if (num > random) {
                flag++;
                alert('太大了!你还有' + (5 - flag) + '次机会');
            } else if (num < random) {
                flag++;
                alert('太小了!你还有' + (5 - flag) + '次机会');
            } else {
                alert('恭喜你,猜对了!数字是' + random);
                break;
            }
            if (flag == 5) {
                alert('太菜了!机会用完了!正确数字是' + random);
                break;
            }
        }
    </script>
    

7.4.2Data对象

7.4.1 Data对象的创建

1.Date 对象用于处理日期与时间。

创建 Date 对象: new Date()

以下四种方法同样可以创建 Date 对象:

var d= new Date()

var d=new Date(milliseconds)  //参数为毫秒

var d=new Date(dateString)

var d=new Date(year,month,day,hours,minutes,second,millisends)

*注:

milliseconds 参数是一个 Unix 时间戳(Unix Time Stamp),它是一个整数值,表示自 1970 1 1 00:00:00 UTCthe Unix epoch)以来的毫秒数。

dateString 参数表示日期的字符串值。

year, month, day, hours, minutes, seconds, milliseconds 分别表示年、月、日、时、分、秒、毫秒。

2.Data()构建函数形式:

Date()构造函数的 3 种使用形式如下。

3.构造函数传入数字型参数,规则如下:

a. 当传入以数字表示的年、月、日、时、分、秒时,最少需要指定年、月两个参数,后面的参数若省略会自动使用默认值,且月的取值范围是 0~11,0 表示 1 月,1 表示 2 月,以此类推。

b.当传入的数字大于合理范围时,会自动转换成相邻数字,将月份设为-1 表示去年12 月,设为 12 表示明年 1 月。构造函数传入数字型参数的示例代码如下

var date2 = new Date(2021, 7, 14, 10, 30, 45);

 // 输出结果:Sat Aug 14 2021 10:30:45 GMT+0800 (中国标准时间)

 console.log(date2);

构造函数传入字符串型参数。当传入以字符串表示的日期和时间时最少需要指定年份,需 要注意的是,日期和时间的格式有多种,这里以“年-月-日 时:分:秒”格式为例。 为Date()构造函数传入字符串型参数的示例代码如下。

var date3 = new Date('2021-08-15 10:30:45');

// 输出结果:Sun Aug 15 2021 10:30:45 GMT+0800 (中国标准时间)

console.log(date3);

7.4.2Date 对象的使用

创建Date对象后,对象中存放的是一个以字符串表示的日期和时间。如果想要单独获取或 设置年、月、日、时、分、秒中的某一项,可以通过调用Date对象的相关方法来实现。          

一 .日期对象的创建

1、直接通过new Date()获取当前时间

         var time=new Date()

         console.log(time)

2、可以传入参数得到一个传入的参数的时间

        var time=new Date('2024-10-24 19:09:09' )

        console.log(time)

 3可以传入一个通过new Date获取的时间,表示复制时间对象。

        var time1=new Date('2024-10-24 20:09:09')

        var time2=new Date(time1)

        console.log(time1)

        console.log(time2)

new Date()的传参情况

1、传一个参数,传一个参数表示毫秒数。

        var time=new Date(3000)

        console.log(time)

2、传两个参数,传递两个参数,第一个表示年,第二个表示月份

        var time =new Date(2019,0)

        console.log(time)

//2018-12-31T16:00:00.000Z,在时间+8之后,正好是2019-01-01的00时

// 注意:JS中月份从0开始,0表示1月,11表示12月。

3、传递三个数字,分别表示年、月、日,日的显示是正常的,从1-31

        var time =new Date(2019,1,20)

        console.log(time)

4、六个参数,分别表示年、月、日、时、分、秒

        var time =new Date(2020,4,20,19,20,30)

        console.log(time)

5、可以直接传时间的字符串

        var time=new Date("2022-05-20 10:10:10")

        console.log(time)

        var time2=new Date("2022/05/20 10:10:10")

        console.log(time2)

        //以上两种格式都可以

7.4.3newDate传递时间字符串获取时间的坑

上面有说到可以传递两种格式的时间字符串:

var time=new Date("2022-05-20 10:10:10")

var time2=new Date("2022/05/20 10:10:10")'

但是,第一种方法有个bug:

在只写年月日,不写时分秒的前提下:

1)、如果月份是个位数,且前缀为0的情况下,得到的时间会多出8小时;

2)、如果月份是两位数,但号数是个位数且前缀为0的话,得到的时间也会多出八小时。

var time=new Date("2022-02-12") // 得到的时间会多出八小时

var time2=new Date("2022-2-02") // 得到的时间 不 会多出八小时

var time3=new Date("2022-12-02") // 得到的时间会多出八小时

var time4=new Date("2022-12-2"); // 得到的时间 不 会多出八小时

7.4.4时间对象的常用get方法

1、getFullYear()--获取当前年份

var date=new Date()

console.log(date.getFullYear())//2022

'

2、getMonth()--获取当前月份

var date=new Date()

console.log(date.getMonth()) //月份是从0开始的

'

3、getDate()--获取当前是几号

var date=new Date()

console.log(date.getDate())

'

4、getDay()--获取当前是周几

var date=new Date()

console.log(date.getDay())

注意:周日是0,周一至周六是1-6。

5、getHours--获取当前的小时

var date=new Date()

console.log(date.getHours())

'

6、getMinutes()--获取分钟

var date=new Date()

console.log(date.getMinutes())

'

7、getSeconds()--获取秒数

var date=new Date()

console.log(date.getSeconds())

'

8、getTime()--获取时间戳

获取Date总的毫秒数(时间戳)

其实时间戳表示的是从1970年1月1号到当前时间的总的毫秒数。

在我们javascript中获取时间戳有三种方法。

//获取Date总的毫秒数(时间戳),是从1970年1月1号到当前的总的毫秒数

//1.通过 valueOf() 或者 getTime() 方法

//得到的是我们当前时间距离1970 1.1的总的毫秒数

var date = new Date();

console.log(date.valueOf());

console.log(date.getTime());

2.简单的写法(最常用的写法)

var date = +new Date();

console.log(date);

//3.H5 新增的,ie9以下不适用

console.log(Date.now())

                       

原文链接:https://blog.csdn.net/qq_57421630/article/details/1232083197.4.5时间对象的常用set方法

上述的是所有get方法,除了getDay()之外,都有对应的set方法,作用是分别单独设置时间。

var date=new Date()

console.log(date)

 

date.setFullYear(2025)

date.setMonth(5)

date.setDate(20)

date.setHours(13)

date.setMinutes(20)

date.setSeconds(10)

console.log(date)

//setDay没有,因为具体的某一天有规定的星期几,不能随便更改,否则时间就乱套了

'

时间是可以做算术运算的,时间进行算数运算的原理是通过时间戳进行运算得出结果;

var date=new Date()

date.setMinutes(date.getMinutes+10)

console.log(date)

'

时间是可以自动进制的,比如1小时最多只有60分钟,但如果你写90分钟,会自动进制;

var date=new Date()

date.setMinutes(90)

console.log(date)

7.4.6日期格式化

date.toLocaleString():会转为一个本地日期格式的【字符串】,虽然不能自动进制,也不能用日期的API,但是可以用字符串的API了。

看似很牛,其实比较垃圾:具有兼容性问题,老IE输出的和主流浏览器输出的东西不一样。

解决:自定义format函数

            function timeFormat(date) {

                       var year = date.getFullYear();

                       var month = date.getMonth() + 1;

                       var dte = date.getDate();

                       var hours = date.getHours();

                       var minutes = date.getMinutes();

                       var seconds = date.getSeconds();

                       var day = date.getDay();

                       month < 10 && (month = "0" + month);

                       hours < 10 && (hours = "0" + hours);

                       minutes < 10 && (minutes = "0" + minutes);

                       seconds < 10 && (seconds = "0" + seconds);

                       var dayarr = [

                             "星期日",

                             "星期一",

                             "星期二",

                             "星期三",

                             "星期四",

                             "星期五",

                             "星期六",

                       ];

                       return (

                             year +

                             "年" +

                             month +

                             "月" +

                             dte +

                             "日 " +

                             hours +

                             ":" +

                             minutes +

                             ":" +

                             seconds +

                             " " +

                             dayarr[day]

                       );

                  }

Arrary对象

Array 对象用于在单个的变量中存储多个值。

Arrary对象创建

new Arrary()新建一个数组对象,数组里面的内容为空

new Arrary(size) size 是期望的数组元素个数。返回的数组,length 字段将被设为 size 的值。

new Arrary(element0, element1, ..., elementn)参数 element …, elementn 是参数列表。当使用这些参数来调用构造函数 Array() 时,新创建的数组的元素就会被初始化为这些值。它的 length 字段也会被设置为参数的个数。

例如

 let a = new Array();
  let b = new Array(2) // size 是期望的数组元素个数。返回的数组,length 字段将被设为 size 的值。
  let c = new Array(1, 2, 4)
  console.log(a);
  console.log(b);
  console.log(c);

 

当把构造函数作为函数调用,不使用 new 运算符时,它的行为与使用 new 运算符调用它时的行为完全一样。

例如

  let e = new Array(5)
  console.log(e);
  let d = Array(5)
  console.log(d);

Arrary对象属性

Length

1.属性描述

length 属性可设置或返回数组中元素的数目。

length 属性是可读可写的,设置 length 属性可改变数组的大小。如果设置的值比其当前值小,数组将被截断,其尾部的元素将丢失。如果设置的值比它的当前值大,数组将增大,新的元素被添加到数组的尾部,它们的值为 undefined

Arrary对象方法

 

 

 

 

push()、pop()

arrayObject.push(ele1,ele2,....,eleX)向数组的末尾添加一个或多个元素,并返回新的长度。

push() 方法可把它的参数顺序添加到 arrayObject 的尾部。它直接修改 arrayObject,而不是创建一个新的数组。push() 方法和 pop() 方法使用数组提供的先进后出栈的功能。

arrayObject.pop()用于删除并返回数组的最后一个元素。

pop() 方法将删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。

例如

let d = [1, 2, 3];
 console.log(d.push(9)); // 输出 4 
console.log(d); // 输出 [1, 2, 3, 9] 
console.log(d.pop()); // 输出 9 
console.log(d); // 输出 [1, 2, 3]

unshift()、shift()

arrayObject.unshift(elet1,ele2,....,eleX)可向数组的开头添加一个或更多元素,并返回新的长度。

unshift() 方法将把它的参数插入 arrayObject 的头部,并将已经存在的元素顺次地移到较高的下标处,以便留出空间。该方法的第一个参数将成为数组的新元素 0,如果还有第二个参数,它将成为新的元素 1,以此类推。unshift() 方法不创建新的创建,而是直接修改原有的数组。

arrayObject.shift()用于把数组的第一个元素从其中删除,并返回第一个元素的值。

如果数组是空的,那么 shift() 方法将不进行任何操作,返回 undefined 值。该方法不创建新数组,而是直接修改原有的 arrayObject。

例如

let d = [1, 2, 3]; 
console.log(d.unshift(9)); // 输出 4 
console.log(d); // 输出 [9, 1, 2, 3] 
console.log(d.shift()); // 输出 9 
console.log(d); // 输出 [1, 2, 3]

toString()、join()

arrayObject.toString()把数组转换为字符串,并返回结果。

数组中的元素之间用英文逗号分隔

arrayObject.join(separator)把数组中的所有元素放入一个字符串。元素是通过指定的分隔符separator进行分隔

返回一个字符串。该字符串是通过把 arrayObject 的每个元素转换为字符串,然后把这些字符串连接起来,在两个元素之间插入 separator 字符串而生成的。

例如

let a = [1, 2, 3, 4]; 
console.log(a.toString()); // 输出 "1,2,3,4" 
console.log(a.join('-')); // 输出 "1-2-3-4"

concat()、splice()

arrayObject.concat(arrayX,arrayX,......,arrayX)用于连接两个或多个数组。同样也可以将参数与原数组进行拼接。

返回一个新的数组,不改变原数组。该数组是通过把所有 arrayX 参数添加到 arrayObject 中生成的。如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组。

arrayObject.splice(index,howmany,item1,.....,itemX)从数组中添加/删除项目,然后返回被删除的项目。

index必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。

howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。

item1, ..., itemX 可选。向数组添加的新项目。

splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。

如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。

reverse()、sort()

arrayObject.reverse()用于颠倒数组中元素的顺序。

该方法会改变原来的数组,而不会创建新的数组。

arrayObject.sort(sortby)用于对数组的元素进行排序

sortby可选。规定排序顺序。必须是函数。

该方法数组在原数组上进行排序,不生成副本。

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。

比较函数应该具有两个参数 a 和 b,其返回值如下:

若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。

若a等于 b,则返回 0。

若 a 大于 b,则返回一个大于 0 的值。

比较函数的逻辑如下:如果 a 是字符串且 b 是数字,则返回 1,表示 a 应该排在 b 之后。

如果 a 是数字且 b 是字符串,则返回 -1,表示 a 应该排在 b 之前。

否则,按数值大小进行比较,返回 a - b。

let a = [1, 2, 3, 4];

a.reverse(); console.log(a); // 输出 [4, 3, 2, 1]

 let b = [0, 1, 2, '1', '2', 'a', 'b'];

b.sort(); // 默认被转换为同一类型进行排序

console.log(b); // 输出 [0, 1, 1, 2, 2, "a", "b"]

 let c = [0, 1, 2, '1', '2', 'a', 'b'];

c.sort((a, b) => { // 希望字符串大于数字


if (typeof a === 'string' && typeof b === 'number') {

return 1;

} else if (typeof a === 'number' && typeof b === 'string') {

return -1;

} else {

return a - b;

}
 }); 
console.log(c); // 输出 [0, 1, 2, 1, 2, "a", "b"]

 

slice()

arrayObject.slice(start,end)从已有的数组中返回选定的元素。

start必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。

end可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。(不包含结束元素)

该方法并不会修改数组,而是返回一个子数组。

  let d = [1, 2, 3, 4, 5]

  console.log(d.slice(1, 3));

String对象

String对象的创建

JavaScript 中,String 对象表示字符串对象,使用 String()构造函数来创建。 在 String()构造函数中传入字符串,就会在创建出来的 String 对象中保存传入的字符串。

示例代码如下:

var str = new String('apple'); // 创建 String 对象

console.log(str); // 输出结果:String {"apple"}

通过前面的学习,我们已经掌握了如何定义字符串类型的变量,那么字符串类型的变量和 String 对象有什么区别呢? 字符串类型的变量也可以像 String 对象一样访问属性和方法,但是字符串类型的变量并不是一个对象,它只是一个字符串类型的数据。通过代码演示字符串变量和 String 对象的区别。

示例代码如下:

var str = 'apple';

var str1 = new String('apple');

console.log(str.length); // 输出结果:5

console.log(str1.length); // 输出结果:5

console.log(typeof (str));// 输出结果:string

console.log(typeof (str1)); // 输出结果:objec

字符串的连接

语法:

sencat(str1[ str2, str3...])

连接一个或多个字符串

示例代码:使用 concat()方法连接字符串'Hello'和'World'

var str = 'Hello';

var str1 = 'World';

console.log(str.concat(str1)); // 输出结果:HelloWorld

获取字符串长度

在JavaScript中,我们可以使用length属性来获取字符串的长度。

语法:

字符串名.length

说明:

调用对象的属性,我们用的是点(.)运算符,可以将它理解为“的”,例如str.length可以看成是“str的length(长度)”。

字符串对象的属性有好几个,不过我们要掌握的也只有length这一个。获取字符串长度在实际开发中用得非常多。

举例:获取字符串长度

        var str = "I Love Study"

        document.write("字符串长度是:"+str.length);

分析:

对于str这个字符串,其实空格本身也是作为一个字符串来处理的,这一点我们很容易忽略。

举例:获取一个数字的长度

        function getlength(n){

            var str = n + "";

            return str.length

        }

        var result = "12345678是" + getlength(12345678) + "位数";

        document.write(result)

大小写转换

在JavaScript中,我们可以使用toLowerCase()方法将大写字符串转化为小写字符串,也可以使用toUpperCase()方法将小写字符串转化为大写字符串。

语法:

字符串名 .toLowerCase()

字符串名 .toUpperCase()

说明:

调用对象的属性,我们用的也是(.)运算符。不过属性和方法不太一样,方法后面需要加上小括号(),而属性则不需要。

JavaScript还有两种大小写转换的方法:toLocalLowerCase()和toLocalUpperCase()。不过这两种方法很少用。

举例:

        var str = "Hello World";

        document.write("正常:"+ str + "<br/>");

        document.write("小写:"+str.toLowerCase()+"<br/>");

        document.write("大写:"+str.toUpperCase()+"<br/>");

 

根据索引返回字符串

方法

作用

charAt(index)

获取index索引的字符,字符串第1个字符的索引为0

charCodeAt(index)

获取index索引的字符的ASCII码

通过代码演示 charAt()方法和 charCodeAt()方法的使用。

查找字符串'Apple'中索引为 2 的字符,以及索引为 0 的字符的 ASCII 码。

示例代码如下。

var str = 'Apple';

console.log(str.charAt(2));   //输出结果:p

console.log(str.charCodeAt(0));// 输出结果:65(字符A的 ASCII 码为 65)

截取字符串

方法

作用

slice(start[,end])

截取从起始(start)索引到终止(end)索引之间的1个子字符串,若省略end则表示从起始(start)索引开始截取到字符串末尾。

substring(start[, end])

截取从起始(start)索引到终止(end)索引之间的1个子字符串,基本和slice相同,但是不接收负值

substr(start[, length])

截取从起始(start)索引开始到length长度的子字符串,若省略length则表示从起始(start)索引开始截取到字符串末尾

分别使用 slice()、substring()以及 substr()方法从字符串'HelloWorld'中截取出字符串'el'和 'World',示例代码如下。

var str = 'HelloWorld';

// 利用 slice()方法实现

console.log(str.slice(1,3));       //输出结果:el

console.log(str.slice(5));         // 输出结果:World

// 利用 substring()方法实现

console.log(str.substring(1,3));   //输出结果:el

console.log(str.substring(5));    // 输出结果:World

// 利用 substr()方法实现

console.log(str.substr(1,2));     //输出结果:el

console.log(str.substr(5));     从// 输出结果:World

替换字符串

在JavaScript中,我们可以使用replace()方法来用一个字符串替换另外一个字符串的某一部分。

语法:

字符串名.replace(原字符串str1, 替换字符串str2)

说明:使用str2替换字符串中的str1,返回替换结果,只会替换第一次出现的str1。

举例: 使用 replace()方法将字符串'RainyDay and SunnyDay'中的第 1 个'Day'替换成'天'

var str = 'RainyDay and SunnyDay';

console.log(str.replace('Day', '天')); // 输出结果:Rainy 天 and SunnyDay

分割字符串

在JavaScript中,我们可以使用split()方法把一个字符串分割成一个数组,这个数组存放的是原来字符串的所有字符片段。有多少个片段,数组元素个数就是多少。

语法:

字符串名.split("分割符")

说明:

分割符可以是一个字符、多个字符或一个正则表达式。此外,分割符并不作为返回数组元素的一部分。

举例:

        var str = "HTML,CSS,JavaScript";

        var arr = str.split(",");

        document.write("数组第1个元素是:" + arr[0] + "<br/>");

        document.write("数组第2个元素是:" + arr[1] + "<br/>");

        document.write("数组第3个元素是:" + arr[2]);

分析:

str.split(" ")表示用空格来分割字符串。在字符串中,空格也是作为一个字符来处理的

str.split(" ")两个引号之间是有一个空格的。str.split(" ")(有空格)是带有一个字符的字符串。

str.split("")(无空格)是一个带有0个字符的字符串,也叫空字符串。两者是不一样的,我们可以通过下面这个例子对比一下。

举例:str.split("")(无空格)

      var str = "study";

        var arr = str.split("");

        document.write("数组第1个元素是:" + arr[0] + "<br/>");

        document.write("数组第2个元素是:" + arr[1] + "<br/>");

        document.write("数组第3个元素是:" + arr[2] + "<br/>");

        document.write("数组第4个元素是:" + arr[3] + "<br/>");

        document.write("数组第5个元素是:" + arr[4]);

 

检索字符串的位置

在JavaScript中,可以使用indexOf()方法来找出“某个指定字符串”在字符串中首次出现的下标位置,也可以使用lastIndexOf()来找出“某个指定字符串”在字符串中最后出现的下标位置。

语法:

字符串名.indexOf(指定字符串)

字符串名.lastIndexOf(指定字符串)

说明:

如果字符串中包含“指定字符串”,indexOf()就会返回指定字符串首次出现的下标,而lastIndexOf()就会返回指定字符串最后出现的下标;如果字符串中不包含“指定字符串”,indexOf()或lastIndexOf()就会返回-1

举例:

        var str = "Hello World!";

        document.write(str.indexOf("world") + "<br/>");

        document.write(str.indexOf("World") + "<br/>");

        document.write(str.indexOf("Worlds"));

分析:

对于str.indexOf("world"),由于str不包含“world”,所以返回-1;

对于str.indexOf("World"),由于str包含“World”,所以返回“World”首次出现的下标位置。字符串的位置是从0开始的。

对于str.indexOf("Worlds"),由于str不包含“Worlds”,所以返回-1。特别注意一下,str包含“World”,但不包含“Worlds”。

在实际开发中,indexOf()用得非常多,我们要重点掌握一下。对于检索字符串,除了indexOf()这个方法外,JavaScript还为我们提供了另外2种方法:match()和search()。

不过3种方法都大同小异,我们只需要掌握indexOf()一个就够用了。为了减轻记忆负担,对于match()和search(),我们可以直接忽略掉。

举例:

var str = "Hello world!";

document.write("l首次出现的下标是:" + str.indexOf("l") + "<br/>");

document.write("l最后出现的下标是:" + str.lastIndexOf("l")); 

分析:

indexOf()和lastIndexOf()不仅可以用于检索字符串,还可以用于检索单个字符

案例:统计字符串中有多少个数字

一个任意字符串,然后统计一下里面有多少个数字。使用for循环结合charAt()方法来获取字符串中的每一个字符,然后判断该字符是否是数字

实现代码如下:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>统计字符串中有多少个数字</title>

</head>

<body>

    <script>

        function getNum(str) {

            var num = 0;

            for (var i = 0; i < str.length; i++) {

                var char = str.charAt(i);

                //isNaN()对空格字符会转化为0,需要加个判断charAt(i)不能为空格

                if (char != " " && !isNaN(char)) {

                    num++;

                }

            }

            return num;

        }

        document.write(getNum("1d3sdsg"));

    </script>

</body>

</html>

 


原文地址:https://blog.csdn.net/2401_86036532/article/details/143790811

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!