什么是ES5? ECMA Script5:ECMA(欧洲计算机制造联合会)的第五次改版,2009年. js中的'use strict'是什么? js的严格模式 目的: ①添加更多报错的场合,消除代码的一些不安全之处,保证代码运行的安全. ②提高编辑器效率,提高运行速度. ③为新版本的JavaScript做铺垫. 补充缺点: ①IE9及以下都不支持. ②在工作中,js代码都会进行压缩,有一些文件没有使用严格模式,而现在的文件使用了严格模式,当压缩后,新文件的'use strict'就到了文件的中间…
1.介绍严格模式 2.严格模式影响范围 变量:  var.delete.变量关键字 对象: 只读属性. 对象字面量属性重复申明 函数:参数重名.arguments对象.申明 其他:this.eval.关键字... 严格模式 ECMAScript 5 引入严格模式('strict mode')概念.通过严格模式,在函数内部选择进行较为严格的全局或局部的错误条件检测,使用严格模式的好处是可以提早知道代码中的存在的错误, 及时捕获一些可能导致编程错误的ECMAScript行为.在开发中使用严格模式能帮…
我们在js中可以使用"use strict";定义了我们在接下来的文档输写中 将按照严格模式进行: function(){ "use strict'; ;// 在这里我们的严格模式只在函数范围内生效:也叫局部严格模式: }; "use strict"; //定义了我们文档全部的严格模式: 严格模式下的作用域: 正常模式下,Javascript语言有两种变量作用域(scope): 全局作用域和函数作用域. 严格模式创设了第三种作用域:eval作用域. &qu…
相关阅读:https://blog.csdn.net/u013185654/article/details/78498393 相关阅读:https://www.cnblogs.com/huangyin1213/p/5573676.html 说明:本片主要对比介绍与数组操作相关的方法 (一)字符串方法(String对象方法) indexOf() //检索字符串 lastIndexOf() //从后向前搜索字符串 match() //找到一个或多个正则表达式的匹配 replace() //替换与正则…
黄金守则: this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window而当函数被作为某个对象的方法调用时, this等于那个对象. 下面是一些相关实践: ------------------------------------------------->闭包相关的this<-------------------------------------------------------- 我们知道,匿名函数的执行环境具有全局性,因此this对象通常指向window,但是…
概述 函数是js中最常见的作用域单元, 声明在一个函数内部的变量或函数会在所处的作用域中隐藏起来, 这是有意为之的非常好的设计原则. 但是随着js的发展, 我们有了某个代码块(通常指{..}内部)隐藏变量或函数的需求, 这就是块级作用域的由来. 下面是不用es6实现块级作用域的三种方法, 供以后开发时参考, 相信对其他人也有用. IIFE IIFE, 即立即执行函数, 用一个函数作用域(闭包)来模拟块级作用域.示例如下: //es6中的块级作用域 {let a = 1; console.log(…
概述 这是我看typescript的时候看引用资源看到的,原文在这里:Understanding JavaScript Function Invocation and "this",我简单地总结一下记下来供以后开发时参考,相信对其他人也有用. 机制 js中的函数调用机制是这样的: 建立一个表argList,从索引1开始塞入函数的参数. 表的索引0的值是thisValue. 把this赋给thisValue,然后调用func.call(argList). 说这么多,其实就是想说明,函数调…
this是JavaScript中最复杂的机制之一.它是一个很特别的关键字,被自动定义在所有函数的作用域中. 一.this到底指向什么? this既不指向函数自身,也不指向函数的词法作用域,具体指向什么,取决于你是怎么调用函数. 直接使用不带任何修饰的函数引用进行调用(即:方法名 + 括号), this指向全局对象(非严格模式)或者undefined(严格模式), 这种绑定称为默认绑定 function foo() { console.log(this.a); } var a = 2; foo()…
this的绑定方式基本有以下几种: 隐式绑定 显式绑定 new 绑定 window 绑定 箭头函数绑定 隐式绑定 第一个也是最常见的规则称为 隐式绑定. var a = { str: 'hello', sayHi() { console.log(this.str) } } a.sayHi() a 调用sayHi,所以this指向了对象a 我们来看一个类似但稍微高级点的例子. var wrapper = { name: 'user1', sayName() { console.log(this.n…
this是什么 this就是函数内部的关键字 看下面例子理解js中的this // 例子1 function fnOne () { console.log(this) } 'use strict' function fnOne () { console.log(this) } // 例子2 let a = { txt: 'hello world', fn: function() { console.log(this.txt) } } a.fn() window.a.fn() // 例子3 let…
目录 序言 class 是一个特殊的函数 class 的工作原理 class 继承的原型链关系 参考 1.序言 ECMAScript 2015(ES6) 中引入的 JavaScript 类实质上是 JavaScript 现有的基于原型的继承的语法糖.类语法(class)不会为JavaScript引入新的面向对象的继承模型. 2.class 是一个特殊的函数 ES6 的 class 主要提供了更多方便的语法去创建老式的构造器函数.我们可以通过 typeof 得到其类型: class People…
参考:阮一峰<javascript的this用法>及<JS中this关键字详解> this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.定义:this是包含它的函数作为方法被调用时所属的对象.总原则,this指的是,调用函数的那个对象,this永远指向函数运行时所在的对象!而非创建时的. 以下是基于浏览器环境做的测试: 作为函数调用: function $(){ this.count = 1; return this; } wi…
原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情况戳这里ECMAScript 5 compatibility table),权威指南上提到在ES3中利用apply模拟该方法的实现(JS权威指南中函数那章), 但无法真实还原该方法, 这也是真bind方法中的有趣特性. (原文这边理解有问题, 这段话的意思如果结合犀牛书上下文的意思, 再结合犀牛书中…
outline prototype 与 __proto__ function 与 object new 到底发生了什么 prototype 与 __proto__ 首先说下在JS中比较容易让人困惑的 prototype 和 __proto__ __proto__ 就是JavaScript中所谓的原型. 一个对象的 __proto__ 属性和自己的内部属性[[Prototype]]指向一个相同的值 (通常称这个值为原型),原型的值可以是一个对象值也可以是null(比如说Object.prototy…
1.js中常用的数组Array对象属性: 如图,其中用红色圆圈标记的部分,为ES5新增的属性. 2.浏览器支持情况: IE:9+; Chrome; Firefox2+; Safari 3+; Opera 9.5+; 3.位置方法 ECMAScript5为数组定义了2个位置方法.indexOf(),lastIndexOf(); 这两个方法都接收两个参数:要查找的项和(可选的)表示查找起点位置的索引. 其中,indexOf()从数组的开头(位置0)开始向后查找,lastIndexOf()则是从数组的…
聊一下JS中的作用域scope和闭包closure scope和closure是javascript中两个非常关键的概念,前者JS用多了还比较好理解,closure就不一样了.我就被这个概念困扰了很久,无论看别人如何解释,就是不通.不过理越辩越明,代码写的多了,小程序测试的多了,再回过头看看别人写的帖子,也就渐渐明白了闭包的含义了.咱不是啥大牛,所以不搞的那么专业了,唯一的想法就是试图让你明白什么是作用域,什么是闭包.如果看了这个帖子你还不明白,那么多写个把月代码回过头再看,相信你一定会有收获:…
js的严格模式会放弃js中的一些不正规的写法,参考 http://www.cnblogs.com/God-Shell/p/3139329.html: 使用声明"use  strict"字符串可以启动js严格模式的检查,作用方式分为两种. 1 全局开启严格模式检查 那么这个"use  strict"字符串可以声明到<script>标记(javascript文件也可以看做单独的<script>标记)内的最顶部,如下: <script>…
代码取自于underscore.js 1.8.3的isEqual函数. 做了一些小小的修改,主要是Function的比较修改. 自己也加了一些代码解读. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js中两个对象的比较</title> <script> /* 需求难点描述: 数组和对象,都…
学习bootstrap.js源码中被js里边的this绕的有点晕 /* ======================================================================== * Bootstrap: alert.js v3.2.0 * http://getbootstrap.com/javascript/#alerts * =================================================================…
关于JS中OOP的具体实现,许多大神级的JS专家都给出了自己的方案. 一:Douglas Crockford 1.1 Douglas Crockford实现的类继承 /** * 原文地址:http://javascript.crockford.com/inheritance.html */ Function.prototype.method = function (name, func) { this.prototype[name] = func; return this; }; Functio…
在JavaScript中函数的调用可以有多种方式,但更经典的莫过于call和apply.call跟apply都绑定在函数上,他们两个的第一个参数意义相同,传入一个对象,他作为函数的执行环境(实质上是为了改变函数的Execution Context执行上下文),也就是this的指向:而第二个参数两者只是类型的不同,call传的是arguments,而apply传的是array.废话不多说,先上一个最基础的例子: function add(c,d){ return this.a + this.b +…
提醒大家,Object.prototype.toString().call(param)返回的[object class]中class首字母是大写,像JSON这种甚至都是大写,所以,大家判断的时候可以都转换成小写,以防出错 1.typeof(param) 返回param的类型(string) 这种方法是JS中的定义的全局方法,也是编译者们最常用的方法,优点就是使用简单.好记,缺点是不能很好的判断object.null.array.regexp和自定义对象. 示例代码: 复制代码代码如下: var…
内容要点: 一.JS中的类 1.JAVA或其他类似强类型 面向对象语言的 类成员的模样 实例字段:它们是基于实例的属性或变量,用以保存独立对象的状态. 实例方法: 它们是类的所有实例所共享的方法,由每个独立的实例调用 类字段:这些属性或变量是属于类的,而不是属于类的某个实例的. 类方法:这些方法是属于类的,而不是属于类的某个实例的 2.JS中的类牵扯三种不同的对象,三种对象的属性的行为和下面三种类成员非常相似: 构造函数对象: 之前提到,构造函数(对象)为JS的类定义了名字.任何添加到这个构造函…
函数本质就是功能的集合 JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能) var fn=function(a){return a+100;} fn=function(a){return a+200;} alert(fn(100)); //300 要访问函数的引用(指针)而不是执行函数时,必须去掉圆括号,加上圆括号表示访问函数执行后的结果 函数体内部的语句在执行时,一旦…
我发现在对JS的学习中有很多朋友对this的指向问题还是有很大的误区或者说只是大致了解,但是一旦遇到复杂的情况就会因为this指向问题而引发各种bug. 对于之前学习过c或者是Java的朋友来说可能这个问题还比较好解决,因为c中指针的指向和Java中类的跳转其实和JS中this的指向有异曲同工之妙. 在这里简单给大家稍微举几个例子  希望对大家有所帮助. JS中this的指向不同于其他语言,JS中的this不是指向定义他的位置,而是在哪调用它它就指向哪里. JS中,普通的函数调用方式有三种:直接…
_proto__(隐式原型)与prototype(显式原型)1.是什么 显式原型 explicit prototype property: 每一个函数在创建之后都会拥有一个名为prototype的属性,这个属性指向函数的原型对象.Note:通过Function.prototype.bind方法构造出来的函数是个例外,它没有prototype属性.(感谢 @陈禹鲁 同学的答案让我知道这一点) NOTE Function objects created using Function.prototyp…
js中的5中基本数据类型 js标识符 第一个字符必须为字母,下划线,或美元符 其他字符可以是字母,下划线,美元符,数字 js标识符区分大小写 标识符不能使关键字和保留字 关键字: break do instanceof typeof case else new var catch finally return void continue for switch while debugger function this with default if throw   delete in try  …
js中使用let定义变量的时候,是需要使用严格模式的,我看到网上有的博客说:如果在不使用严格模式的情况下,使用let会报错,但是在实验的过程中,我直接定义了let变量而且也没有使用严格模式,并没有报任何的错误.所以使用let的时候不使用严格模式会报错的情况不做过多的解释. 我们在使用let的时候添加上'use strict'即可,按照要求来使用let. 1.声明之后未赋值的情况,表现相同,都是undefined 不懂得加QQ 2270312758   <script type="text/…
js中的数字按照IEEE 754的标准,使用64位双精度浮点型来表示.其中符号位S,指数位E,尾数位M分别占了1,11,52位,并且在ES5规范中指出了指数位E的取值范围是[-1074, 971]. 精度问题汇总 想用有限的位来表示无穷的数字,显然是不可能的,因此会出现一些列精度问题: 浮点数精度问题,比如0.1 + 0.2 !== 0.3 大数精度问题,比如9999 9999 9999 9999 == 1000 0000 0000 0000 1 toFixed四舍五入结果不准确,比如1.335…
对象就是一个由属性构成的无序列合集. var myObj = { name: ‘suki’, age: 21, interests: [‘guitar’, ‘tennis’] }; 属性是没有顺序的,可以把 age 写在 name 前面也完全没有问题. 对象 V.S. 原始类型 1,对象有属性,原始数据类型从技术角度看是没有属性的: 对象的属性值可以是原始数据类型也可以是对象,属性名-属性值被称为键值对,属性名是键,属性值是值: 2,对象有方法,原始数据类型没有方法: 方法其实就是对象的特殊属性…