zoukankan      html  css  js  c++  java
  • 3.qml-ECMAScript_03(Object基类对象、String对象)

    在上章学习了:2.qml-ECMAScript_02(原始值类型、通用转换方法)

    本章我们来初步学习ECMAScript的内置对象.Object对象和String对象.

     

    对象创建与回收
    对象是由 new 运算符加上要实例化的对象的名字创建的,实际对象就是引用值,指向存储对象的内存处

    例如,下面的代码创建 Array对象的实例:

    var arr1 = new Array;     // 如果类的构造函数不传入参数,括号可以省略。
    var arr2 = new Array(5);
    console.log(arr1.length) // 打印0
    console.log(arr2.length) // 打印5
    arr1 = null;
    arr2 = null;

    由于ECMAScript有垃圾收集器,所以当没有任何引用指向一个对象时,该对象会自动被垃圾收集器回收、释放。
    如果我们是在一个函数里new出来的对象,那么都不需要置null,函数执行完毕后也会自动释放.但是每次用完一个对象,还是应该置null取消引用,保持一个良好习惯.


    Object对象-所有对象的基类

    Object类是所有ECMAScript类的基类,Object类的所有属性和方法都会出现在其他类中.示例如下所示:

         var str = new String("hello");
            console.log(str instanceof Object); //  true
    
            var arr = new Array(5);
            console.log(arr instanceof Object); //  true

    Object 对象具有下列属性:

    • constructor 指向创建对象函数的引用(指针)。对于 Object 对象,该指针指向Object() 函数。
    • prototype : 指向该对象类的引用。对于所有的对象,它默认返回 Object 对象的一个实例。

    Object 对象还具有几个方法:

    • hasOwnProperty(property) :判断对象是否有某个特定的属性。property是个字符串。(例如,o.hasOwnProperty("name"))
    • isPrototypeOf(object) : 判断该对象是否为另一个对象的原型。
    • propertyIsEnumerable(property) : 判断给定的属性是否可以用 for...in 语句进行枚举得出(只有自定义的对象属性和方法是可以枚举的)
    • toString() : 返回对象的类型名字
    • valueOf() : 返回最适合该对象的原始值。对于许多对象,该方法返回的值都与 ToString() 的返回值相同。

    Object可以直接动态创建属性;也可以动态创建方法;也可以通过delete运算符删除开发者定义的属性和方法,也可以使用数组下标[]的方法获取属性的值。下面是一个简单的示例:

    Window{
        visible: true
        id: wind
        Component.onCompleted: {
            var object = new Object
            object.name = "ZhangSan" // 动态创建属性
            object.year = "26"
            object.printInfo = function printInfo() { // 动态创建方法
                console.log("name-" , this.name , "year-" , this.year);
            }
            object.printInfo();          // 调用方法,打印 name- ZhangSan year- 26
            console.log(object.name)     // 打印 ZhangSan
            console.log(object["year"])  // 通过[]数组方式访问属性.打印 26
            console.log(object.hasOwnProperty("name")) // 检查是否有"name"属性,返回true
    
            delete object.name          // delete只能删除我们动态创建的name属性,不能删除object自带的属性和方法
    
            console.log(object.name)   // 打印 undefined,表示没有这个属性
            for (var prop in object) { // 循环打印自定义的属性和方法(name属性已经被delete,无法找到): "26","function printInfo() { [native code] }"
                console.log("for:",object[prop])
            }
        }
    }            

    除处之外,我们还可以这样通过初始化列表的形式来构造Object类:

      var object2 = {
          "name" : "LiSi",
          "year" : 26,
         eat: function(){ // 创建方法
    console.log("吃鱼")
    }   } console.log(object2.name)
    // LiSi console.log(object2.year) // 26 for (var prop in object2) { // 循环打印自定义的属性和方法: "LiSi","26"   console.log(object2[prop])   }

    String对象

    String 对象是 String 原始类型的引用类型,它是以下方式创建的:

    var oStringObject = new String("hello world");

    String可以通过数组下标[]的方法获取单个字符,还可以通过赋值方式来添加成员.

    比如:

    var str = new String("2021");
    str += " 11/11 "             // str = "2021 11/11"

    String对象具有下列属性:

    • length : 返回字符个数,对于中文,还是当成一个字符来看.

    String对象具有下列方法:

    • toString() : 返回字符串原始值
    • valueOf() : 和toString()一样, 返回字符串原始值
    • charAt(num) :返回第num个位置处的单个字符,位置从0开始的
    • charCodeAt(num) : 返回第num个位置处的单个字符编码值

    示例如下所示:

    var str1 = new String("hello world");
    var str2 = new String("hello world");
    console.log(str1 == str2);                        // 比较的是对象本身地址,由于str1和str2的地址不同,返回false
    console.log(str1.toString() == str2.toString()); // 比较的是字符串原始值,由于str1和str2指向的原始值都在同一地址,返回true
    console.log(str1[1]);                // 打印e
    console.log(str1["1"]);             // 通过字符串数字访问,打印e
    console.log(str1.charAt(1));       // 打印e
    console.log(str1.charAt("1"));    // 通过字符串数字访问,打印e
    console.log(str1.charCodeAt(1));  // 打印e的编码值,101

    注意:

    相同内容的String对象用"=="判断是返回false的.因为比较的是对象本身地址,而不是对象引用的值.

    在ECMAScript中,数字和字符串数字的值其实是一样的意思,比如:

    "5" == 5 // "5"会转换为5,来和5比较,所以为true

    如果想除了判断值相等,还要判断类型的话,请使用全等号"==="或者非全等号"!==",比如:

    "5" === 5 // 为false,因为类型不同
    "5" !== 5 // 为true
    • str1.concat(str2) : 连接字符串,返回str1 + str2的内容
    • str1.indexOf(str2) : 查找子串,从str1头部开始查找str2子串,找到则返回子串开头位置,否则返回-1
    • str1.lastIndexOf(str2) : 反向查找子串,找到则则返回子串开头位置,否则返回-1

    示例如下:

    var str1 = new String("hello ");
    var str2 = new String("world");
    
    console.log(str1.concat(str2));    // 打印 "hello world"
    console.log(str1.indexOf("ll"));   // 打印 2
    console.log(str1.indexOf("hh"));    // 未找到,打印 -1
    console.log(str1.concat(str2).lastIndexOf("l")); // 打印 9
    • str1.localeCompare(str2) : 比较字符串.

    如果str1的内容大于str2,返回正数

    如果str1的内容等于str2,返回0

    如果str1的内容小于str2,返回负数

    • str.substring(num,num) : 获取子串,var1表示str中的起始位置,var2表示str2中的终止前位置(不包含在内),如果省略var2参数,则默认终止位置在str末尾.
    • str.slice(num,num) : 和substring()方法一样,唯一的区别在于slice支持负数.而substring不支持负数,统统当做0来处理.

    示例如下:

    var str = new String("hello world");
    
    console.log(str.slice(3));        // 从起始位3处获取子串,打印 "lo world"
    console.log(str.substring("3")); // 从起始位3处获取子串,打印 "lo world"
    
    console.log(str.slice(3,7));     // 从[3,7]位处获取子串,所以子串长度为7-3-1=3, 打印 "lo w"
    console.log(str.substring(3,7)); // 从[3,7]位处获取子串, 打印 "lo w"
    
    console.log(str.slice(3,-2));     // 从起始位3到末尾-2之前位置获取子串,打印:"lo wor"
    console.log(str.substring(3,-2)); // 由于substring() 总把较小值作为起始位,较大值作为结束位[-2,3],并且不支持负数,所以获取的位置是[0,3],打印:"hel"
    • str.toUpperCase() : 返回字符串大写
    • str.toLowerCase() : 返回字符串小写
    • str.arg(var) : 通过arg方式替换

    示例如下:

    var str = new String("%1,%2,%3");
    console.log(str.arg("123").arg(133).arg(5.2)); // 打印"123,133,5.2"
    • str.replace(str1,str2) : 替换,将str中出现str1的地方,替换为str2,支持正则表达式替换
    • str.match(regx) :    通过正则表达式查找String内容

    正则表达式,示例如下所示:

    var str = new String("时间:2020 11/12 20:35 ");
    var result = str.match(/d+/g);               // 匹配字符串中所有数字项
    console.log(result.length);                   // 共找到5组匹配项
    for (var i in result) {
        console.log("index",i,": ",result[i]);   // 循环打印 2020、11、12、20、35
    }
    console.log(str.replace(/d+/g,"?"));        // 将数字项改为"?",打印: "时间:? ?/? ?:?"

    "/d+/g": 最前面的“/”与最后面的“/”是分隔符,表示正则表达式的开始与结束。所以正则表达式匹配的内容是"d+",匹配多个数字.

    而最后的"g"表示的是全局匹配,可以匹配到多次的情况,如果不加"g",那么result的匹配项最多只能有1个,匹配成功就截止.

    相关的标志还有i(ignoreCase,表示忽略大小写)、m(multiline,表示允许跨行)

    忽略大小写,匹配含有str标签项,示例如下所示:

    var str = new String("str:456; ASDZ Str:123; RES STr:XYZ; STR:qaz;");
    var result = str.match(/str(.+?);/gi); // 查找含有str和;的匹配项,g:global(匹配多次) i:ignoreCase(不区分大小写)
    console.log(result.length); // 打印4
    for (var i in result) {
      console.log("index",i,": ",result[i]);
      // 循环打印 index 0 : str:456;
      // index 1 : Str:123;
      // index 2 : STr:XYZ;
      // index 3 : STR:qaz;
    }

    正则表达式元字符参考: https://deerchao.cn/tutorials/regex/regex.htm

    • str.split(str2) :    通过str2将str字符串对象分割成字符串数组

    示例如下所示:

            var str = new String("123,456,789,159");
            var arr = str.split(",");
    
            for (let index in arr) {
                console.log(arr[index]);
            }

     


    人间有真情,人间有真爱。

    如果您喜欢这里,感觉对你有帮助,并且有多余的软妹币的话,不妨投个食吧,赞赏的时候,留下美句和你的博客地址哦~   戳这里看谁投食了


查看全文
  • 相关阅读:
    java bigdecimal (java double也时会失真)
    图像二维频谱的理解
    设计模式:装饰器模式实现 固定类功能
    c# winform 技术提升
    c# 多态的美丽(虚方法、抽象、接口实现)
    5天玩转C#并行和多线程编程
    [C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护)
    用Ngen指令加快C#程序的启动速度
    cmd 批处理制作
    c#程序打包、机器代码生成(Ngen.exe)
  • 原文地址:https://www.cnblogs.com/lifexy/p/14538627.html
  • Copyright © 2011-2022 走看看