JavaScript秘密花园
译文地址 bonsaiden.github.io/JavaScript-Garden/zh/#intro.authors
之前被人问到JS一些概念性的东西,感觉很模糊,可能层次比较浅,偏理论的东西实践得较少,发现一处花园, 采点小蜜。
1 数字不是对象的误解
2.toString();报语法错误的原因是因为试图将 点号解析为浮点数的一部分。
(2).toString()可行的。
2 hasOwnProrotype方法继承自Object.prototype
是JS中唯一一个处理属性但是不查找原型链的函数。
3 函数名在函数内总是可见的
var a = function b (){b();}//见9
4 'use strict'
严格模式下,arguments的 getter 和 setter 方法不会被创建
function f(a) {
"use strict";
a = 42;//setter没有被创建, arguments[0] 不会变
return [a, arguments[0]];
}
5 ??? 然而,的确有一种情况会显著的影响现代 JavaScript 引擎的性能。这就是使用 arguments.callee。
function foo() {
arguments.callee; // do something with this function object
arguments.callee.caller; // and the calling function object
}
function bigLoop() {
for(var i = 0; i < 100000; i++) {
foo(); // Would normally be inlined...
}
}
上面代码中,foo 不再是一个单纯的内联函数 inlining(译者注:这里指的是解析器可以做内联处理), 因为它需要知道它自己和它的调用者。 这不仅抵消了内联函数带来的性
能提升,而且破坏了封装,因此现在函数可能要依赖于特定的上下文。
因此强烈建议大家不要使用 arguments.callee 和它的属性。
6 构造函数
构造函数内部this指向新创建的对象;
新创建的对象prototype被指向构造函数的的prototype;
如果 函数内部没有显示的return表达式,就会隐式的返回新建的对象;
如果return 的不是对象,那么将返回新建的对象;
7 JS函数中只有通过两种方式声明局部变量 参数 和 var
8 变量提升(hoist)
变量声明会被提升,但是缺省值是undefined
函数式声明也会被提升,而且可以立即使用
9 JS函数内部变量查找顺序
1 查找var声明
2 查找是否存在以该名称命名的函数
3 查找函数自身
function sss(){
var sss = 1;
function sss(){}
}
10 遍历数组的时候, 使用in 会遍历出原型链上的属性
在使用for(var i=0; L=arr.length; i<L; i++) 缓存数组长度会提高效率
11 相等和比较
JavaScript 是弱类型语言,这就意味着,等于操作符会为了比较两个值而进行强制类型转换。
不像普通的等于操作符,严格等于操作符不会进行强制类型转换。
虽然 == 和 === 操作符都是等于操作符,但是当其中有一个操作数为对象时,行为就不同了。这里等于操作符比较的不是值是否相等,只有对象的同一个实例才被认为是
相等的。 这有点像 Python 中的 is 和 C 中的指针比较。
12 typeof/instanceof 操作符
typeof操作符 是JS设计的缺陷之一,大多数情况会返回Object。而且总是返回字符串。
要想精确地得到变量类型,Object.prototype.toString.call('test').slice(8,-1)
instanceof是用来检测对象的构造函数(会有多个)
13 eval
eval()会执行一段JS字符串,只有被直接调用的时候,才会在当前作用域中执行。
var a = eval; a('xxx'); 和 eval('xxx')执行环境会有所不同。
setTimeout/setInterval也接受字符串作为第一个参数,并且执行。但是总是在全局作用域中执行,其中的'eval'不是被直接调用。
14 undefined
???全局环境中有个变量叫做undefined, 保存的是undefined类型实际值的副本,因此对它赋新值不会改变undefined类型的值。
15 JS是有分号的语言,需要分号解析源代码,因此在解析的时候会自动插入分号,会产生隐患。
16
function Foo() {
this.value = 42;
this.method = function() {
console.log(this,3333); //执行函数的时候this指向了window,延迟
};
setTimeout(this.method, 500);//this执行新建的Foo对象,决定使用哪个方法,立即决定。
}
new Foo();
JavaScript秘密花园的更多相关文章
- JavaScript 秘密花园——对象的使用和属性操作
JavaScript 中所有变量都是对象,除了两个例外 null 和 undefined. false.toString(); // 'false' [1, 2, 3].toString(); // ...
- 160426、JavaScript 秘密花园
简介 关于作者 这篇文章的作者是两位 Stack Overflow 用户, 伊沃·韦特泽尔 Ivo Wetzel(写作) 和 张易江 Zhang Yi Jiang(设计). 贡献者 贡献者 中文翻译 ...
- JavaScript 秘密花园 学习心得
目的 记录一下学习心得,便于以后复习,内容是比较基础的...但是很多内容我还是不知道... 对象 对象使用和属性 1.JavaScript 中所有变量都可以当作对象使用,除了两个例外 null和dun ...
- [笔记]JavaScript 秘密花园
1.hasOwnProperty相关 为了判断一个对象是否包含自定义属性而不是原型链上的属性,我们需要使用继承自 Object.prototype 的 hasOwnProperty方法.hasOwnP ...
- 《JavaScript 秘密花园》
恰巧今天是传统民间重要的节日之一--七夕节: 被大家挂在嘴上最多的一句话便是:有对象了吗?这不-- 这样的话,那咱就先给new出一个对象吧: var boyfriend = new Object(); ...
- note《JavaScript 秘密花园》
点我跳转 (一)JavaScript-Garden-Object (二)JavaScript-Garden-Function (三)JavaScript-Garden-Array (四)JavaScr ...
- 探究javascript对象和数组的异同,及函数变量缓存技巧
javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...
- JavaScript –类型之我晕
每次写博我觉得取上恬当的题目比整篇行文都难,词量有限的情况下突然想到JavaScript拾遗应该会是一个非常文艺而夺目的博文题目,但我并没有急着使用,经验告诉我应该先去搜一下看有没有被用过.果不其然, ...
- JavaScript ——闭包理解
昨天晚上听别人谈起闭包这个东西,虽然对js有一点了解但却丝毫没有印象,今天也没什么事就顺便研究了一下满足好奇宝宝.整合于网上的理解,记录一下. 一.闭包的作用域 要理解闭包,首先必须理解Javascr ...
随机推荐
- sysctl -P 报错解决办法 error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown keyerror: "net.bridge.brid ...
- url解析字符串
课程链接:http://www.imooc.com/video/6711/0
- ORACLE和SQL语法区别归纳
数据类型比较类型名称 Oracle SQLServer 比较字符数据类型 CHAR CHAR 都是固定长度字符资料但oracle里面最大度为2kb,SQLServer里面最大长度为8kb ...
- Spring MVC前台POST/GET方式传参数的方法
假设前台通过submit传值,代码如下: <form action="testPost.do" method="post"> 页码:<inpu ...
- iMuseum
iMuseum 每日环球展览 iMuseum https://itunes.apple.com/cn/app/%E6%AF%8F%E6%97%A5%E7%8E%AF%E7%90%83%E5%B1%95 ...
- WebSocket API使用篇检测浏览器是否支持WebSocket(4)
WebSocket API是下一代客户端-服务器的异步通信方法.前面有三篇文章已经对WebSocket有了一些介绍,这里我总结了一下.我在使用WebSockets API过程中遇到的问题. 1.检测浏 ...
- BZOJ2257 [Jsoi2009]瓶子和燃料 【裴蜀定理】
题目链接 BZOJ2257 题解 由裴蜀定理我们知道,若干的瓶子如此倾倒最小能凑出的是其\(gcd\) 现在我们需要求出\(n\)个瓶子中选出\(K\)个使\(gcd\)最大 每个数求出因数排序即可 ...
- nowcoder 提高组模拟赛 最长路 解题报告
最长路 链接: https://www.nowcoder.com/acm/contest/178/A 来源:牛客网 题目描述 有一张 \(n\) 个点 \(m\) 条边的有向图,每条边上都带有一个字符 ...
- [WC2007]剪刀石头布——费用流
比较有思维含量的一道题 题意:给混合完全图定向(定向为竞赛图)使得有最多的三元环 三元环条件要求比较高,还不容易分开处理. 正难则反 考虑,什么情况下,三元组不是三元环 一定是一个点有2个入度,一个点 ...
- 【BZOJ 4565】 [Haoi2016]字符合并 区间dp+状压
考试的时候由于总是搞这道题导致爆零~~~~~(神™倒序难度.....) 考试的时候想着想着想用状压,但是觉得不行又想用区间dp,然而正解是状压着搞区间,这充分说明了一件事,状压不是只是一种dp而是一种 ...