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代表了按顺序绑定的参数值
相关文章推荐
- 详解JavaScript正则表达式之RegExp对象
- this详解:JAVASCRIPT中的this到底是谁?
- this详解:JAVASCRIPT中的this到底是谁?
- [ExtJs] ExtJs4.2 数据模型Ext.data.Model学习
- Javascript学习笔记-1(类型、变量、for语句、数组、字符串、原型对象、函数对象)
- javascript自执行函数
- this详解:JAVASCRIPT中的this到底是谁?
- js继承的实现
- this详解:JAVASCRIPT中的this到底是谁?
- 详解JavaScript基于面向对象之继承
- Javascript样式指南
- 学习正则表达式(js、C#)
- C#NetFrame3.5 JsonHelper
- 【翻译】要理解Ext JS 5小工具
- 【转】JVM统计监控工具-jstat
- C#实现中国天气网JSON接口测试
- ajax和jsonp长连接的一些问题
- 在JS中操作json数据
- JavaScript 闭包的例子
- 在JS中操作json数据