您的位置:首页 > Web前端 > JavaScript

Javascript学习笔记-2(对象、函数)

2015-12-13 10:59 603 查看

原始类型变量和引用类型变量:

1、原始变量:number、string、boolean、null、undefined。变量内存存的就是值,按值传递的

2、引用变量:对象变量,变量内存存的是指针,所以是按指针传递

鉴别原始类型:typeof ; 但typeof null === object

鉴别引用类型:obj instaceof Constructor

isArray(arr):鉴别数组

封装类型:Number、String、Boolean

当 原始变量 number、string、boolean 需要当做对象使用(比如 添加属性,使用方法) 时,自动装箱为相应的引用类型

name = "li"
name.last = "ziqiang"   // temp = new String(name); temp.last="";  temp = null;
console.log(name.last)  // temp = new String(name); console.log(temp.last)  //undefined


内建类型

内建类型是系统内部提供了构造函数,可以直接new,也可以通过字面形式创建对象

//每个内建类型都可以 字面形式创建对象
Array       //new Array()、[1,2,3]
Data        //
Error       //
Function    //new Function()、function fun(){}
Object      //{key:value}
RegExp      //new RegExp()、/reg/


对象

对象3种属性:内部属性、数据属性(变量)、访问器属性(setter/getter) [[ name ]]

内部属性:

[[prototype]]:          //原型对象,
//Object.getPrototypeOf()读取,
//Object.create()或者__proto__来设置

[[extendable]]          //是否能给对象添加新的属性

//Object.isExtensible()读取到,
//Object.preventExtensions()将该属性的值设置为false.一旦设置为false,就无法再设置回true了.


数据属性特性:

自添加的属性默认 是可遍历,可配置、可写的,系统添加的则都是false

[[value]]       :
[[enumerable]]: 该数据 是否可被遍历,for-in循环和Object.keys()受影响
[[configurable]]: 该数据是否可配置,若为false,你不能删除这个属性,不能改变这个属性的大部分特性(除了[[Value]]),
[[writable]] : 数据属性特有的 ,代表是否可写,


访问器属性: setter、getter

///在获取或赋值属性attrname时调用的方法。。。注意,没有function关键字,
get attrname(){}
set attrname(){}


改变属性及属性特性

ECMA5之前不能访问对象的 隐式属性”[[name]]”,现在可通过函数改变 obj.name 的行为

属性描述符:将属性特性 组成一个对象

{
value: 123,
writable: false,
enumerable: true,
configurable: false
}


下面的函数,要实现属性描述符,来确定一个对象,或一个属性的特性

//设置a对象的attrname属性的特性
Object.defineProperty(a, attrname, {[[ name ]]:value} );
//设置对象a的 多个 属性描述
Object.defineProperties(a, arrrname:{[[ name ]]:value},)

//创建一个对象a,舍子它的原型对象和属性特性描述
a = Object.create(proto, attrDesc);

//返回对象obj的名为propName的自身属性(非继承来的)的属性描述符.如果没有这个自身属性,则返回undefined.
Object.getOwnPropertyDescriptor(obj, attrName);


探测是否拥有属性: in 操作符,检查自有属性和 原型属性。 hasOwnProperty() 检查自有属性

删除属性: delete obj.attr;

遍历属性: for-in访问可Enumerable的 自有和原型属性,,,obj.keys()返回自有的Enumerable属性

函数对象

1、特有 call 内部属性,代表可调用。

2、函数声明: function name(){}; 执行引擎 会把函数声明提升到 代码顶部,而函数表达式不能

函数表达式: 匿名函数

3、函数参数 存放与一个 类似数组的 arguments中(不是数组,

Array.isArray(arguments)===false)和数组的方法不同,

4、函数 有length属性,代表形参个数

5、函数没有重载(因为参数个数任意),同名函数 以最后一个为准

6、函数对象可改变this的方法: call、apply、bind(this,args); args代表了按顺序绑定的参数值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: