你不知道的JavaScript笔记----对象】的更多相关文章

对象: 1.定义对象属性 属性描述符(也称为:数据描述符) Object.defineProperty(Object,PropertyName,{ value: 6, writable: true, configurable: true, enumerable: true }) 1.1 Writable writable 决定是否可以修改属性的值. 如: var myObject = {}; Object.defineProperty( myObject, "a", { value:…
一.对象 在javascript中,对象是拥有属性和方法的一种基本数据类型 1.创建object 创建object实例有如下两种方式: 使用new操作符后跟object构造函数创建,如下代码: var person=new object(); person.name='nicholas'; person.age='29'; 使用对象字面量表示法,如下代码: var person={ name:'nicholas'; //在对象字面量中,使用逗号分隔不同属性 age:29 //最后一个属性后面不能…
语法 语句表达式 句子是完整表达某个意思的一组词,由一个或多个短语组成,他们之间由标点符号或者连接词连接起来. 语句相当于句子,表达式相当于短语,运算符则相当于标点符号和连接词. JavaScript 中表达式可以返回一个结果值. var a = 3 * 6; var b = a; b; var a = 3 * 6;   var b = a; 声明语句,因为它声明了语句 a = 3 * 6;   b = a;   表达式语句  语句的结果值 表达式的副作用 var   a =  42;  var…
原生函数 常用的原生函数 String() Number() Boolean() Array() Object() Function() RegExp() Date() Error() Symbol() 内部属性 [Class] 所有typeof 返回值为object 的对象都包含一个内部属性[Class],这个属性无法直接访问,一般通过Object.prototype.toString(..) 来看. 例如: Object.prototype.toString.call([1,2,3]); /…
类型: JavaScript 有7种内置类型 空值 (null) 未定义(undefined) 布尔值(boolean) 数字(number) 字符串(string) 对象(object) 符号(symbol) 除对象以外,其他统称为“基本类型” 用typeof 运算符来查看值的类型 typeof undefined  === "undefined";   // true typeof true === "boolean";  // true typeof 42 =…
异步:现在与将来 分块的程序 可以把JavaScript 程序写在单独的js 文件中,这个程序是由多个块组成的,这些块 中只有一个是现在执行,其余在捡来执行,最常见的块单位是函数. 例如: function now() { return 21; } function later() { answer = answer * 2; console.log("Meaning of life:", answer); } var answer = now(); setTimeout (later…
对象 对象可以通过两种形式定义: 声明形式和构造形式 声明形式语法: var myObj = {key:value} 构造形式语法: var myObj = new Object(); myObj.key = value; 类型:   语言类型有六种 : string number boolean null undefined object 内置对象: String Number Boolean Object Function Array Date RegExp Error var myObje…
this和对象原型 this是一个很特别的关键字,被自动定义在所有函数的作用域中 // foo.count 是0,字面理解是错误的 function foo(num) { console.log("foo:"+ num); this.count++; } foo.count = 0; var i; for(i=0;i<10;i++){ if(i>5){ foo(i) } } console.log(foo.count)  //0 // 使用词法作用域解决问题 functio…
规避冲突 function foo(){ function bar(a){ i = 3; console.log(a + i); } for ( var i=0; i < 10; i++){ bar(i * 2) } } // 11无限死循环 区分函数声明和函数表达式最简单的方法是看 function 关键字出现的位置,如果function是声明中的第一个词,那么是函数声明,否则是函数表达式. (function foo(){})() 立即执行的函数表达式 IIFE 立即执行函数表达式 var…
[[Prototype]]机制 [[Prototype]]是对象内部的隐试属性,指向一个内部的链接,这个链接的作用是:如果在对象上没有找到需要的属性或者方法引用,引擎就 会继续在 [[Prototype]] 关联的对象上进行查找.同理,如果在后者中也没有找到需要的 引用就会继续查找它的 [[Prototype]],以此类推.这一系列对象的链接被称为“原型链”. function Foo() { // ... } var a = new Foo(); Object.getPrototypeOf(…
你不知道的Javascript(上卷)这本书在我看来是一本还不错的书籍,这本书用比较简洁的语言来描述Js的那些"坑",在这里写一些博客记录一下笔记以便消化吸收. 1 编译原理 在此书中,开始便提出:Javascript是一门编译型语言,我一开始以为这是国内翻译的锅,翻译的不够准确,后来我还专门去github看了,作者确实是将Js描述为一门编译型语言(compiled language).然而我认为作者更想表达的是Js也拥有和Java一般的特定的编译过程.而不是传统得认为只是单纯的进行&…
你不知道的JavaScript上卷笔记 前言 You don't know JavaScript是github上一个系列文章   初看到这一标题的时候,感觉怎么老外也搞标题党,用这种冲突性比较强的题目吸引眼球,以致最初真没去看内容.直到出了中文版<你不知道的JavaScript>,一看评价大家都说好,买来一读,内容果然很好,很多地方,让我这个半路转行JavaScript的人豁然开朗.中文版现在出了上卷,中卷应该很快会推出,下卷就要等久一点了 作用域和闭包 作用域是什么 1.现代JavaScri…
<你不知道的JavaScript>是一个不错的JavaScript系列书,书名可能有些标题党的意思,但实符其名,很多地方会让你有耳目一新的感觉. 1.typeof null === "object"// true ES6中JavaScript的类型有:null.undefined.string.number.boolean.object和symbol.但为啥上面的表达式为true呢?这其实是JavaScript的一个bug.最初设计是根据类型对应的前三位是不是0来判断是否为…
第一部分: 作用域和闭包 一.作用域 1. 作用域:存储变量并且查找变量的规则 2. 源代码在执行之前(编译)会经历三个步骤: 分词/此法分析:将代码字符串分解成有意义的代码块(词法单元) 解析/语法分析:将词法单元流转换成抽象语法树(AST) 代码生成:将抽象语法树转换成可执行代码 3. LHS查询: 变量出现在赋值操作左侧, RHS查询: 变量出现在赋值操作右侧 4. 作用域嵌套:在当前作用域中无法找到某个变量的时候,引擎就会在外层的嵌套作用域中继续查找,直到找到该变量,或抵达最外层的作用域…
概述 这是我看<你不知道的JavaScript(中卷)>中关于类型检查的笔记,供以后开发时参考,相信对其他人也有用. typeof 我们知道js中有七种内置类型:undefined, null, string, boolean, object, number, symbol. 我们分别用typeof对它们一一进行检查: typeof void(0) //输出'undefined' typeof null //输出'object' typeof 'haha' //输出'string' typeo…
概述 放假读完了<你不知道的javascript>上篇,学到了很多东西,记录下来,供以后开发时参考,相信对其他人也有用. 这篇笔记是这本书的下半部分,上半部分请见<你不知道的javascript>读书笔记1. 误区 经常可以在js中听到一句话,万物皆对象,其实在某种意义上来说,这句话是错的.因为js中还有很多对象的子类型,比如函数,数组,内置对象等,他们除了有对象的性质之外,还具有一些特别的行为,严格说来,他们不等于对象. 在其它语言中,属于对象的函数通常被称为方法.因此我们经常把…
js有5种原始值类型:布尔值.数字.字符串.null和undefined. 用typeof检测一下: typeof true; //"boolean" typeof 2; //"number" typeof “s”;//"string" typeof null;//"object":ECMAScript把null描述为独特的类型,但返回值却是对象类型,有点困惑. 可以使用Object.prototype.toString.ca…
js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+1}" 反射获取函数源代码的功能很强大,使用函数对象的toString方法有严重的局限性.toString方法的局限性ECMAScript标准对函数对象的toString方法的返回结果(即该字符串)并没有任何要求.这意味着不同的js引擎将产生不同的字符串,甚至产生的字符串与该函数并不相关. 如果函数…
本文首发在我的个人博客:http://muyunyun.cn/ <你不知道的JavaScript>系列丛书给出了很多颠覆以往对JavaScript认知的点, 读完上卷,受益匪浅,于是对其精华的知识点进行了梳理. 什么是作用域 作用域是一套规则,用于确定在何处以及如何查找变量. 编译原理 JavaScript是一门编译语言.在传统编译语言的流程中,程序中一段源代码在执行之前会经历三个步骤,统称为"编译". 分词/词法分析 将字符串分解成有意义的代码块,代码块又称词法单元.比如…
概述 放假读完了<你不知道的javascript>上篇,学到了很多东西,记录下来,供以后开发时参考,相信对其他人也有用. js的工作原理 引擎:从头到尾负责整个js的编译和运行.(很大一部分是查找操作,因此比如二分查找等查找方法才这么重要.) 编译器:负责语法分析和代码生成. 作用域:收集所有声明的变量,并且确认当前代码对这些变量的访问权限. LHS查询和RHS查询: LHS查询:当变量出现在赋值操作左边时,会发生LHS查询,如果LHS查询不到,那么会新建一个变量.严格模式下,如果这个变量是全…
笔记摘自:<你不知道的JavaScript(上)>第3章 提升 1.包括变量和函数在内的所有声明都会在任何代码被执行前首先被处理. 2.变量和函数声明从它们在代码中出现的位置被“移动”到了最上面.这个过程就叫作提升. 3.只有声明本身会被提升,而赋值或其他运行逻辑会留在原地. 4.如果提升改变了代码执行的顺序,会造成非常严重的破坏. 5.思考以下代码: foo(); function foo() { console.log(a); // undefined var a = 2; } foo函数…
笔记摘自:<你不知道的JavaScript(上)>第3章 函数作用域和块作用域 let 1.let 关键字可以将变量绑定到所在的任意作用域中 2.let 为其声明的变量隐式地劫持了所在的块作用域 3. 通常来讲,显示的代码优于隐式或一些精巧但不清晰的代码. 4.只要声明是有效的,在声明中的任意位置都可以使用{..}括号来为let创建一个用于绑定的块. 5.使用let进行的声明不会在块作用域中进行提升.声明的代码被运行之前,声明并不存在. 例如: { console.log(bar); // R…
用了一个星期把<你不知道的JavaScript>看完了,但是留下了很多疑惑,于是又带着这些疑惑回头看JavaScript的内容,略有所获. 第二遍阅读这本书,希望自己能够有更为深刻的理解. 词法作用域 --如果是 有状态 的解析过程,还会赋予单词语义-- 这本书是以编译原理的部份内容结合JavaScript来开篇的,所以如果没有学过编译原理,这一小部分内容显得有些晦涩. 虽然多数人没有接触过编译原理,但有一个东西必定知道,就是markdown语法.实际上,从markdown文件到HTML的过程…
关于闭包,初学者会被绕的晕头转向,在学习的路上也付出了很多精力来理解. 让我们一起来揭开闭包神秘的面纱. 闭包晦涩的定义 看过很多关于闭包的定义,很多讲的云里雾里,晦涩难懂.让不少人以为闭包是多么玄乎的东西.在我看过的所有书籍中,我更喜欢<你不知道的javascript(上卷)>的定义: 当函数可以记住并访问所在的词法作用域时,就产生了闭包,或者说函数在创建时的词法作域之外执行. 通俗的来说(不严谨): 就是函数套函数,子函数可以有权访问父函数的变量.父函数的父函数的变量.一直到全局变量.子函…
前段时间在每天往返的地铁上抽空将 <你不知道的JavaScript(上卷)>读了一遍,这本书很多部分写的很是精妙,对于接触前端时间不太久的人来说,就好像是叩开了JavaScript的另一扇门,很多内容醍醐灌顶!所以决定将这本书分四个部分整理出来,同时也这本书强烈推荐给正在进阶的小伙伴们.这篇博文主要整理第一部分 作用域. 词法作用域 理解作用域 首先要介绍下JS参与程序 var a = 2的处理过程的演员表: 引擎 从头到尾负责整个JavaScript 程序的编译及执行过程. 编译器 引擎的好…
对象的分类 一.对象的分类 1.内置对象 Global Math 2.本地对象 Array Number String Boolean Function RegExp 3.宿主对象 DOM BOM 二.Math对象 格式: Math.方法(参数) 1.取绝对值 Math.abs(); var num1=-2.4; alert(Math.abs(num1)) 2.取近似整数 //Math.round() 四舍五入 //Math.round() //四舍五入 var num=2.1; alert(M…
javascript的对象:无序属性的集合,而每个属性可以包含基本值.对象或者函数.举例: var person = new Object(); person.name = "Nicholas"; person.age = 29; person.job = "Software Engineer"; person.sayName = function(){ alert(this.name); }; person.sayName(); person是一个对象,name.…
对象是JavaScript基本数据类型,在JavaScript中除了Undefined.Null.布尔型(ture.false).字符串和数字之外,其他的都属于对象. 在JavaScript中,一个对象就是一个具有属性的特体,比如一个人就是一个对象,每个人都具有身高.体重.年龄等一些属性/特征,在JavaScript中,也可以用属性来给对象定义它的特征. 那么在JavaScript中对象要怎么创建呢?在JavaScript中如何创建对象主要有以下几种方法: 使用对象字面量创建对象(key-val…
尽管JavaScript中有对象的概念,但一般我们并不说JavaScript是面向对象的编程语言,因为它不具备面向对象的一些最基本特征. 在c++/Java等这些面向对象的编程语言中,我们要定义一个对象,就必须要先把对象的一些特征抽象出来,也就是说我们必须先定义一个类,然后以这个类作为模版来创建对象.JS有些不同,可以直接以字面量的形式创建对象,代码如下: <script type="text/javascript"> var obj = { name:"Jane…
1.window对象 1.1.window对象: window对象是BOM的核心,window对象指当前的浏览器窗口 所有javaScript全局对象.函数以及变量均自动生成为window对象的成员 全局变量是window对象的属性 全局函数是window对象的方法 甚至HTML DOM的document也是window对象的属性之一 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&…