引用类型(对象是某个特定引用类型的实例)
2017-02-20 10:15:58 0 举报
AI智能生成
引用类型是一种数据结构,它存储的是对象在内存中的地址,而不是对象本身。这意味着,当我们创建一个引用类型的变量时,实际上是在创建一个指向堆内存中某个对象的指针。这使得我们可以在不同的变量之间共享和操作同一个对象,而不需要复制对象本身。引用类型通常用于表示复杂的数据结构,如类、接口和委托等。由于引用类型在使用时需要额外的内存管理,因此它们可能会导致更高的内存消耗和性能开销。然而,通过使用引用类型,我们可以更灵活地组织和管理代码,实现更高效的数据操作和通信。
作者其他创作
大纲/内容
引用类型(对象是某个特定引用类型的实例)
5.7 单体内置对象
ranklist
聊天
popularity
动态
temporary
概念
对象是某个特定引用类型的实例
新对象是使用new操作符后跟一个构造函数来创建的。构造函数本身就是一个函数,只不过该函数是出于创建新对象的目的而定义的
5.1 Object类型
创建对象(2种)
varperson = new Object();
new操作符后跟Object构造函数
使用对象字面量表示法
第二种适合包含大量属性的对象的过程
var person = {};//与 new Object()相同,定义只包含默认属性和方法的对象
使用对象(2种)
alert (person.name);
实例点属性
alert(person[\"name\"]);
实例[属性名的字符串];或者实例[属性名变量];
方括号主要优点是可以通过变量来访问属性,也适合属性名中包含会导致语法错误的字符,或者属性名使用的是关键字或保留字
person[\"first name\"];//okperson.first name;//报错
5.2 Array
创建数组(2种)
var colors = new Array();//一个空的数组var colors = new Array(20);//长度为20的数组var colors= new Array(\"red\
使用Array构造函数,其中new字省略也能达到同样的效果
length的使用
可以改变数组长度
利用length属性也可以方便地在数组末尾添加新项
Array.isArray(被检测数组);//检测是不是数组
instanceof操作符会由于网页上可能同时存在多个不同版本的Array,所以可能检测不出来。所以使用isArray来替代instanceof,目的是忽略掉多个框架
转换方法
colors.join(\"-\");//red-green-blue
如果数组中的某一项的值是null或者undefined,那么该值在join()、tolocaleString、toString、valueOf方法返回的结果中以空字符串表示
5.3 Date
5.4 RegExp
5.5 Function
每个函数都是Function类型的实例,函数名实际上也是一个指向函数对象的指针
创建函数(3种)
函数声明法
声明变量法
var sum = new Function(\"num1\
构造函数法,但不推荐这种,因为会导致解析两次代码,第一次是解析常规的ECMAscript代码,第二次是解析传入构造函数中的字符串,从而影响性能,但是这种方法说明了 函数是对象,函数名是指针
5.5.2 函数声明与函数表达式
解析器会率先读取函数声明,并使其在执行任何代码之前可用;至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解析执行
5.5.4 函数内部属性
在函数内部,有两个特殊的对象:arguments和this
this
this引用的是函数执行的环境对象
函数的名字仅仅是一个包含指针的变量而已。因此,即使是在不同的环境中执行,全局sayColor()函数与o.sayColor()指向的仍然是同一个函数
arguments
arguments保存函数参数,但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的指针
函数对象属性:caller
ECMAScript5定义的
这个属性中保存着调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,他的值为null
function outer(){ inner();}function inner(){ alert(inner.caller);//或者alert(arguments.callee.caller);}
5.5.5 函数属性和方法
length和prototype
length
表示函数希望接受的命名参数的个数
prototype
子主题
sayColor.apply(执行环境,参数);//参数为数组,一调用马上执行sayColor.call(执行环境,一个一个参数传递);//参数为一个一个的,一调用马上执行var bind = sayColor.bind(执行环境,参数数组);//var变量可以在想要执行的地方执行,不是一开始就执行
支持bind方法的浏览器有IE9+、Firefox4+,Safari 5.1+、Opera12+、chrome
每个函数继承的toLocaleString()和toString(),valueOf()方法始终都返回函数的代码
5.6 基本包装类型
why
为了便于操作基本类型值,ECMAScript提供了3个特殊的引用类型
Boolean、Number、String
what
与其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为。实际上,每当读取一个基本类型值得时候,后台会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据
var s1 = \"some text\";var s2 = s1.substring(2);相当于(1)创建String类型的一个实例(2)在实例上调用指定的方法(3)销毁这个实例
var s1 = new String(\"some text\");var s2 = s1.substring(2);s1 = null;
引用类型VS基本包装类型
引用类型new操作生成的对象,只要当前作用域还在,他就存在
基本包装类型new操作生成的对象,只存在于一行代码的执行瞬间,然后立刻被销毁
意味着不能再运行时为基本类型值添加属性和方法
eg:var s1 = \"some text\";s1.color = \"red\";alert(s1.color);//undefined
第二行代码试图为字符串s1添加一个color属性。但是,当第三行代码再次访问s1时,其color属性不见了。因为第二行创建的String对象在执行第三行代码时已经被销毁了,第三行代码又创建自己的String对象,而该对象没有color属性
5.6.1 Boolean类型
永远不要使用Boolean对象
5.6.2 Number类型
创建
var nmberObject = new Number(10);
toString(进制)
进制为空的时候,是10进制
var num = 10;num.toString();//10num.toString(2);//\"1010\"
toFixed(小数点位数)
var num = 10.005;num.toFixed(2);//10.01
如果数值本身包含的小数位比指定的多,那么接近指定的最大小数位的值就会舍入
toExponential(小数点数位)
var num = 99;num.toPrecision(1);//1e+2num.toPrecision(2);//99num.toPrecision(3);//99.0
5.6.3 String类型
属性
var str = \"hello world\";str.length;//11
方法
访问字符串中特定字符(2个)
chartAt(数字);//数字基于0的字符位置
var stringValue = \"hello world\";stringValue.charAt(1); //\"e\"
charCodeAt(数字);//同上
var stringValue = \"hello world\";stringValue.charCodeAt(1); //101
字符串操作方法
concat();//将一个或多个字符串拼接起来
var str = \"hello\";var result = str.concat(\" word\
1、str的值都没变过的2、用加号做字符串的拼接更方便
基于子字符串创建新字符串的方法(3个)
var stringValue = \"hello world\";stringValue.slice(3); //lo world
0 条评论
回复 删除
下一页