for...in 循环 var obj = { age: 18, fname: "Rand ", lname: "McKinnon" }; function showProps(obj, objName) { var result = ""; for (var prop in obj) { result += objName + "." + prop + " = " + obj[prop] + "…
JavaScript中推断一个对象是否为"空对象" 这里指的"空对象"是类似于:{ } 和 new Object() 这种. 详细的代码实现和原理例如以下: // 所谓"空对象",即不包含不论什么可枚举(自己定义)的属性. 简而言之,就是该对象没有属性能够通过for...in迭代. // for-in循环会同一时候枚举非继承属性和从原型对象继承的属性,假设有.则马上返回false,否则默认返回true. isEmptyObject: functi…
我们可以利用JavaScript的语法特征,以类的思想来创建对象. 方法一:原始方法代码如下: <script> var obj = new Object(); obj.name = "Kitty";//为对象增加属性 obj.age = 21; obj.showName = function () {//为对象添加方法 console.log(this.name); }; obj.showAge = function(){ console.log(this.age); }…
在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等,如果你写出这样的代码遍历其中的属性: 1 2 3 4 var num = new Number(); for(var pro in num) {     console.log("num." + pro + &q…
提取字符串substring(start,end)substr(start [, length ])JavaScript substr() 方法 --…
语句 JavaScript是解释型语言,解释器是按照顺序逐句执行的(除了进行一些少量预处理,如将函数声明提前). 顺序是由流程控制语句来控制的,常用的流程控制语句包括: 条件控制语句:if...else和switch...case语句 循环控制语句:while....do...while.for和for-in语句 其他:break.continue和try...catch语句 代码中除去流程控制语句,剩下的部分只做两件事: 为变量赋值(声明新变量并复制如var obj = {word: "hel…
JavaScript有一些内置类型,还有很多常用的内置的方法,本文稍作总结,以备查阅. 值类型 我的理解,值类型是分配在栈上的,而引用类型(当然也包括引用类型内部的值类型)是分配在堆上的.值类型是不可以改变的,比如: var s = "hello"; s = "hello2"; 上述并没有将字符串"hello"改成"hello2",而是新创建了一个字符串"hello2",前一个字符串仍然存在(只不过无法访问…
<!DOCTYPE html> <html> <head> </head> <body> <script type="text/javascript"> var class2type = { '[object Boolean]' : 'boolean', '[object Number]' : 'number', '[object String]' : 'string', '[object Function]' :…
<!DOCTYPE html> <html> <head> </head> <body> <script type="text/javascript"> function isWindow( obj ) { /* jshint eqeqeq: false */ return obj != null && obj == obj.window; }; function test(){ console.l…
Javascript中的对像赋值与Java中是一样的,都为引用传递.就是说,在把一个对像赋值给一个变量时,那么这个变量所指向的仍就是原来对 像的地址.那怎么来做呢?答案是“克隆”. 克隆有两种方法:一种是“浅克隆”,一种是“深克隆”(深度克隆). 浅克隆:基本类型为值传递,对象仍为引用传递. 深克隆(深度克隆):所有元素均完全复制,并于原对象完全独立(原对象的修改不影响新对象). 深度克隆的代码如下(深克隆去掉递归即为浅克隆): Object.prototype.clone = function…
JS语法 javascript 对象: var cars=new Array("Audi","BMW","Volvo"); 声明变量类型 当您声明新变量时,可以使用关键词 "new" 来声明其类型: var carname=new String; var x=      new Number; var y=      new Boolean; var cars=   new Array; var person= new Obj…
转载: 查看原文 在javascript中,对象和数组是两种不同的类型,这和php中的数组概念不同.在javascript中,也有一些精妙的算法,用来对一些对象进行排序.我在面试迅雷的时候,也拿到一道题,当时做题的时候考虑到时间,没有去仔细研究,回来后再读了一些方法,就知道真正的考点在哪里了. 我们现在有一组“学生”对象,包含“名字,年龄”等属性,现在要求一个算法,把这些对象放在一个数组里,可以实现按照年龄对这些对象进行排序. var sdts = [ { name:"小明", age…
闭包的定义 闭包是指函数有自由独立的变量.换句话说,定义在闭包中的函数可以“记忆”它创建时候的环境. 闭包的浅显理解 function makeFunc() { var name = "Mozilla"; function displayName() { alert(name); } return displayName; } var myFunc = makeFunc(); myFunc(); 这段代码看起来别扭却能正常运行.通常,函数中的局部变量仅在函数的执行期间可用.一旦 mak…
/* 把P中的可枚举属性复制到o中,并返回o中 如果o和p中含有同名的属性,则覆盖O中的属性 这个函数并不处理getter和setter以及复制属性 */ function extend(o,p){ for (prop in p){ //遍历p中的属性 o[prop] = p[prop]; //将属性添加至o中 } return o; } /* *将p中的可枚举属性复制o中,并返回o 如果o和p中有同名的属性,o中的属性将不受影响 这个函数并不处理getter和setter以及复制属性 */ f…
正则表达式是用来进行字符串匹配的. 定义正则表达式有两种方法:/wor/或者new RegExp("wor"). 使用方法 在JS中,使用正则表达式的方法有: 字符串的search方法:"hello".search(/e/)返回1.(以0开始的索引,如果未匹配到,返回-1) 字符串的match方法:"hello".match(/e/)返回["e"].(表示匹配到的字符串,若未匹配,返回空数组) 正则表达式对象的test方法:(…
关于 || 和 && 运算符 var name=(document.getElementById('txtName') || '') && document.getElementById('txtName').value; 这个是从左往右依次运算 等同于 var c=document.getElementById('txtName'); var name; if(c) { name=c.value; }else{ name=""; } 实际上着一整个运算…
function Person() { this.name = "fs"; } Person.prototype.sayHello = function () { return "hello,fs"; }; var p1 = new Person(); p1.sayHello(); p1.sayHello()首先通过p1._proto_向上查找Person.prototype,如图所示: 在Person的prototype中找到了sayHello():如果,美玉偶找…
var arr = new Array(); function Person() { for (var i = 0; i < 10; i++) { //要记住,这个属性函数申明,只有立即执行才会取scope属性 var item = function () { return i; }; arr.push(item); } } Person(); arr[0](); 这个代码执行person();首先完成初始化.注意因为i不是内部匿名函数的属性,所以i并没有当做匿名函数的属性来完成初始化. 然后执…
var foo = {a1:'1',a2:'2',a3:'3'}; //获得对象所有属性的数组 Object.getOwnPropertyNames(foo); > [ 'a1', 'a2', 'a3' ] //获取对象属性的个数 Object.getOwnPropertyNames(foo).length; > 3 getOwnPropertyNames的浏览器支持 Feature  Chrome Firefox  Internet Explorer  Opera  Safari  Basi…
需求:对timelist排序 安装keys . 分析:timelist 是个数组对象,里面包含属性 keys,val.这里借助数组sort方法 传入function <script> //模拟数据源 var timeList = [{ keys: 1, val: "12点" }, { keys: 3, val: "24(0)" }, { keys: 2, val: "6点" }, { keys: 4, val: "18点&q…
注册列表示例 一个社交网络有一组成员,每个成员有一个存储其朋友信息的注册列表. function Member(name){ this.name=name; this.friends=[]; } var a=new Member('钟二'), b=new Member('张三'), c=new Member('赵四'), d=new Member('王五'), e=new Member('阮六'), f=new Member('耿七'); a.friends.push(b); b.friends…
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Memento</title> </head> <body> <script> /** * 备忘录模式 * * 定义: * 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢…
第一章 精华 1,JavaScript的函数(主要)基于词法作用域(lexical scoping)的顶级对象.强类型语言允许编译器在编译时检测错误,但弱类型很自由,无需建立复杂的类层次,不用做强制造型.JavaScript拥有强大的对象字面量表示法,这种表示法是JSON的灵感来源. 2,JavaScript有一个无类型的(class-free)对象系统,在这个系统中,对象可以直接从其他对象继承属性. 3,JavaScript依赖于全局变量来进行连接,所有编译单元的所有顶级变量被撮合到一个全局对…
javascript是一门动态语言(动态语言Dynamic Programming Language:动态类型语言,意思就是类型的检查是在运行时做的,也就是常说的“弱类型”语言),没有类的概念,有class保留字,但不能用作变量名 原型:Javascript中的每一个对象都有一个内部私有的连接指向另一个对象,这个对象就是原对象的原型 注意:原型是一个对象,其他对象可以通过他实现属性继承 原型链:这个原型对象也有自己的原型,直到对象的原型为null为止(也就是没有原型),这种一级一级的链结构就称为…
JavaScript 面向对象精要--理解对象 尽管JavaScript里有大量内建引用类型,很可能你还是会频繁的创建自己的对象.JavaScript中的对象是动态的. 一.定义属性 当一个属性第1次被添加给对象时JavaScript在对上上调用了一个名为 [[Put]]的内部方法,该方法会在对象上创建一个新节点保存属性,就像 哈希表上第一次添加一个键一样这个操作不仅指定了初始值 也定义了属性的一些特征 1.1 [[Put]]内部方法 [[Put]]在对象上创建一个自有属性 1.2 [[Set]…
在ECMAScript5(简称 ES5)中,有三种 for 循环,分别是: 简单for循环 for-in forEach 在2015年6月份发布的ECMAScript6(简称 ES6)中,新增了一种循环,是: for-of 下面我们就来看看这 4 种 for 循环. 简单 for 循环 下面先来看看大家最常见的一种写法: const arr = [1, 2, 3]; for(let i = 0; i < arr.length; i++) { console.log(arr[i]); } 当数组长…
模式是解决或者避免一些问题的方案. 在JavaScript中,会用到一些常用的编码模式.下面就列出了一些常用的JavaScript编码模式,有的模式是为了解决特定的问题,有的则是帮助我们避免一些JavaScript中容易出现的错误. 单一var模式 所谓"单一var模式"(Single var pattern)就是指在函数顶部,只使用一个var进行变量声明的模式.例如: function func() { var a = 1, b = 2, sum = a + b, myObject…
现实生活中真的对象没有找到,在JavaScript 里左一个对象又一个对象,搞的我也是晕晕乎乎不知所云.人事复杂,人心难懂.我虽然是文科生,但是也不善于巧言.还是在js里面找找对象吧.那么我们今天就从js的对象开始入手. 昨天,我们讲过了js里面的数据类型分为两种,原始类型,对象类型.对象类型的组成又是由原始类型和对象类型共同组成的. 今天我们来了解一下对象的一些特征.使用对象无非是增(crate) .删(delete).改(set).查(query); 对象由键值对儿组成,那么对象的属性(ke…
一.in的用法 for...in 枚举一个对象的所有可枚举属性 检测DOM/BOM属性 if ("onclick" in elem) { // 元素支持onclick } if ("onerror" in window) { // window支持onerror } 检测js对象的原型属性(结合hasOwnProperty()函数) if ("attr" in obj && !obj.hasOwnProperty("at…
在JavaScript中,遍历一个对象的属性往往没有在其他语言中遍历一个哈希(有些语言称为字典)的键那么简单.这主要有两个方面的原因:一个是,JavaScript中的对象通常都处在某个原型链中,它会从一个或多个的上层原型上继承一些属性.第二个原因是,JavaScript中的属性不光有值,它还有一些除了值以外的其他特性,其中一个影响属性遍历的特性就是[[Enumerable]],如果该值为true,则称这个属性是可枚举的,否则反之. 知道了这些,我们就可以把属性的遍历分为四种情况. 注:示例代码中…