• 《JavaScript高级程序设计》读书笔记(五)引用类型


    内容
    ---使用对象
    ---创建并操作数组
    ---理解基本的JavaScript类型
    ---使用基本类型和基本包装类型


    引用类型
    --引用类型的值(对象)是引用类型的一个实例
    --在ECMAScript中,引用类型是一种数据结构
    --用于将数据和功能组织在一起,也常称为类(并不妥当)
    --尽管ECMAScript从技术上讲是一门面向对象的语言
    --但是它不具备传统的面向对象语言所支持的类和接口等基本结构
    --引用类型有时候也被成为对象定义,描述一类对象所句有的属性和方法
    --引用类型和类并不是一个概念

    --使用new操作符后跟一个构造函数来创造新的对象
    --构造函数本身就是一个函数,只不过该函数处于创建新对象的目的而定义

    var person = new Object();
    --创建Object引用类型的一个新实例,并保存在变量person中
    --Object只为新对象定义了默认的属性和方法


    Object类型
    --使用new操作符后跟一个构造函数来创建Object实例

    var person = new Object();
    person.name = "luking";
    person.age = 22;
    --使用对象字面量表示法
    --不会调用Object构造函数

    var person = {
    name:"luking",
    age:22,
    "str":"asdasd"
    };
    --数值属性名会自动转化为字符串

    var person = {}; //等同于new Object()

    --访问对象属性时,可以使用点表示法,也可使用方括号语法
    --方括号语法可以接受变量

    person.name;
    person["name"];
    var name = "name";
    person[name];
    person["first name"]; //点表示法无法访问这种属性


    Array类型
    --ECMAScript中的数组的每一项可以保存不同类型的值
    --大小是动态的,可以随着数据的添加自动增长

    --使用Array构造函数,创建数组

    var colors = new Array(); //[]
    var colors = new Array(10); //[empty x 10]
    var colors = new Array("red","green","blue"); //["red","green","blue"]

    --可以省略new 操作符
    --使用数组字面量表示法创建
    --不会调用Array构造函数

    var colors = [];
    var colors = ["red","green","blue"];
    var colors = [1, 2, , ]; //不建议
    --空的逗号代表值为undefined
    --最后一位加逗号,一般浏览器不识别,IE8-会识别并多一位undefined

    --从0开始的索引,读取数组
    --数组length属性表示数组长度
    --length是动态的,修改其值,会增加(undefined)或着删除数组项
    --为超出length的索引项设置值,会更新length属性
    --中间的未赋值项是undefined
    --length上限为42亿
    --添加超过上限的项会异常
    --初始大小于上限接近的数组,会运行时间超长的脚本错误


    检测数组
    --对于同一个全局作用域 instanceof可以判断是不是array
    -- value instanceof Array
    --如果页面中包含多个框架,就会有多个全局执行环境
    --就会有两个以上不同版本的Array构造函数
    --es5新增Array.isArray()方法判断是不是数组


    转换方法
    --对象都具有,toLocaleString().toString()和valueOf()方法
    --toString()方法返回数组每一项的字符串形式以逗号拼接的一个字符串
    --会调用每一项的toString()方法,拼接成整个字符串
    --valueOf() 返回这个数组的指针
    --alert(),会自动调用toString()方法用于输出字符串
    var a = [1,2,"red"];
    a.toString(); //"1,2,red"
    a.valueOf(); //[1,2,"red"]

    --toLocaleString()方法于toString()类似
    --toLocaleString()会调用每一项的tolocalString()方法

    var person1 = {
    toLocaleString:function() {
    return "local1";
    },
    toString:function() {
    return "string1";
    }
    };
    var person2 = {
    toLocaleString:function() {
    return "local2";
    },
    toString:function() {
    return "string2";
    }
    };

    var people = [person1,person2];
    people.toString(); //"string1,string2"
    people.toLocaleString();//"local1,local2"

    --tolocaleString(),toString(),valueOf()默认以逗号分隔
    --join(String)函数会返回以String为分割符的数组字符串
    --String不写或传递undefined 默认以逗号分隔
    --传入null 则会以"null"为分割符
    --如果某一项是null或者undefined,
    --tolocaleString(),toString(),valueOf(),join()都以空字符串对待

    var colors = ["red", "blue", "green"];
    colors.join("-"); //"red-blue-green"
    colors.join(); //"red,blue,green"
    var u = undefined;
    var n = null;
    colors.join(u); //"red,blue,green"
    colors.join(n); //"rednullbluenullgreen"


    栈方法
    --数组提供实现栈操作的方法,来把数组当成栈数据结构来使用
    --栈 LIFO(last-in-first-out,后进先出),最新添加的项最早被移除
    --栈中项的插入(推入)和移除(弹出),只发生在栈顶
    --push() 入栈,pop() 出栈
    --push(args,....) 可推入任意数量的参数,推入栈中,并修改length的长度,并返回
    --pop() 弹出最后一项,并length-1


    队列方法
    --FIFO first-in-first-out 先进先出
    --shift(); 取得数组第一项,并length-1
    --push(args,...),同上

    --unshift(args,...) 在数组前端插入任意长度项,并修改length长度,并返回length
    --参数顺序 就是插入后 项的顺序,不会颠倒过来
    --结合pop()方法,可实现反向队列


    重排序方法
    --返回值都是重排之后的数组的索引值

    reverse() 反转数组序列
    --直接对原数组反转,影响原数组

    sort(function) 排序
    --默认升序排序,调用每一项的toSting()方法,进行字符串排序
    --可接受一个比较函数实现自定义排序
    --比较函数接受两个参数a,b
    --a<b return 负数, a==b return 0,a>b return 正数

    function compare(v1, v2) {
    if(v1 < v2) {
    return-1;
    } else if (v1 > v2) {
    return 1;
    } else {
    return 0;
    }
    }
    var vs = [0, 1, 5, 10, 15];
    vs.sort(); //[0, 1, 10, 15, 5]
    vs.sort(compare); //[0, 1, 5, 10, 15]

    --改变compare的返回值可以实现不同的排序
    --对于数值类型或者valueOf()会返回数值的对象类型可以简化compare函数

    function compare(v1, v2) {
    return v2 - v1;
    }


    数组操作方法

    concat(args,....);
    --基于当前数组的所有项创建一个新副本,并把接受的参数添加到这个副本的末尾
    --如果参数是数组,则把每一项都添加到副本中
    --如果不是数组,则简单的添加

    var colors = ["red", "green", "blue"];
    var colors2 = colors.concat("yellow", ["blcak", "brown"]);

    colors; //["red", "green", "blue"]
    colors2; //["red", "green", "blue", "yellow", "blcak", "brown"]

    slice(start[,end])
    --基于当前数组的一段(一个或者多个)创建新数组,一个参数或者两个
    --参数表示返回项的起始和结束,[start,end) 左闭右开
    --如果参数是负数,表示倒数,
    --开始位置必须在结束位置左边,否则取段无效,返回空数组
    --不在范围的取段 返回空数组

    var v = [0,1,2,3,4,5];
    v.slice(0,3); //[0, 1, 2]
    v.slice(2,3); //[2]
    v.slice(2); //[2, 3, 4, 5]
    v.slice(0,-2); //[0, 1, 2, 3]
    v.slice(-1,-2); //[]
    v.slice(-2,-1); //[4]

  • 相关阅读:
    我败在了盲目和没有计划
    跟我一起学.NetCore目录
    跟我一起学.NetCore之依赖注入作用域和对象释放
    跟我一起学.NetCore之Asp.NetCore启动流程浅析
    std::unordered_map
    Android apps for “armeabi-v7a” and “x86” architecture: SoC vs. Processor vs. ABI
    android studio 配置相关问题
    shell script
    vscode配置
    linux常用命令笔记
  • 原文地址:https://www.cnblogs.com/loveluking/p/9445094.html
Copyright © 2020-2023  润新知