深入js系列-环境
javascript运行环境
js如果只在引擎中运行,它会严格遵循并且可以预测的,但是js几乎都在宿主环境中运行,浏览器或者Node环境
ECMAScript中的Annex B
介绍了浏览器兼容性问题导致与官方规范的差异
• 在非严格模式中允许八进制数值常量存在,如0123(即十进制的83)。
• window.escape(..) 和window.unescape(..) 让你能够转义(escape)和回转(unescape)
带有% 分隔符的十六进制字符串。例如,window.escape( "? foo=97%&bar=3%" ) 的结果
为"%3Ffoo%3D97%25%26bar%3D3%25"。
• String.prototype.substr 和String.prototype.substring 十分相似,除了前者的第二个
参数是结束位置索引(非自包含),后者的第二个参数是长度(需要包含的字符数)。
Web ECMAScript规范,介绍官方ECMAScript和目前浏览器中JavaScript实现的差异
<!-- 和--> 是合法的单行注释分隔符。
• String.prototype 中返回HTML 格式字符串的附加方法:anchor(..)、big(..)、
blink(..)、bold(..)、fixed(..)、fontcolor(..)、fontsize(..)、italics(..)、
link(..)、small(..)、strike(..) 和sub(..)。
以上内容在实际开发中很少使用,也不推荐,我们更倾向于使用其他的内建
DOM API 和自定义工具集。
• RegExp 扩展:RegExp.$1 .. RegExp.$9(匹配组) 和RegExp.lastMatch/RegExp["$&"](最
近匹配)。
• Function.prototype 附加方法:Function.prototype.arguments(别名为arguments 对象)
和Function.caller(别名为arguments.caller)。
宿主对象 由宿主对象创建并提供给js引擎的变量,包括内建对象和函数
常见的宿主对象,如下例子
var a = document.createElement( "div" );
typeof a; // "object"--正如所料
Object.prototype.toString.call( a ); // "[object HTMLDivElement]"
a.tagName; // "DIV"
需要注意宿主对象的行为差异
• 无法访问正常的object 内建方法,如toString();
• 无法写覆盖;
• 包含一些预定义的只读属性;
• 包含无法将this 重载为其他对象的方法;
全局DOM变量
一个不太为人所知的事实是:由于浏览器演进的历史遗留问题,在创建带有id 属性
的DOM 元素时也会创建同名的全局变量
<div id="foo"></div>
if (typeof foo == "undefined") {
oo = 42; // 永远也不会运行
}
console.log( foo ); // HTML元素
当页面出现多个id同名时,我们可以直接使用该全局变量来获取同id的HTMLCollection
故意设置两个id同名,当然编码时不推荐,简易保持唯一

使用id作为变量名来获取同名DOM

原生原型
不要扩展原生原型,因为随着规范发展,扩展的功能可能会被实现,使得扩展和规范冲突
必要的扩展建议作如下处理
if (!Array.prototype.push) {
// Netscape 4没有Array.push
Array.prototype.push = function(item){
this[this.length-1] = item;
};
}
shim/polyfill
polyfill 能有效地为不符合最新规范的老版本浏览器填补缺失的功能,让你能够通过可靠的代码来支持所有你想要支持的运行环境,shim/polyfill能够填充新的API,但是没法填充新的语法,我们可以使用bable来将新的语法转换成旧的语法
保留字
宿主环境实现的限制
下面列出一些已知的限制:
• 字符串常量中允许的最大字符数(并非只是针对字符串值);
• 可以作为参数传递到函数中的数据大小(也称为栈大小,以字节为单位);
• 函数声明中的参数个数;
• 未经优化的调用栈(例如递归)的最大层数,即函数调用链的最大长度;
• JavaScript 程序以阻塞方式在浏览器中运行的最长时间(秒);
• 变量名的最大长度。
深入js系列-环境的更多相关文章
- node.js系列笔记之node.js初识《一》
node.js系列笔记之node.js初识<一> 一:环境说明 1.1 Linux系统CentOS 5.8 1.2 nodejs v0.10.15 1.3 nodejs源码下载地址 htt ...
- Node.js系列-http
前言: 最近一直忙着公司项目的事,战友们的留言也没空回复,博客也有段时间没有更新了,年底了就是一个的忙啊~~~(ps:同感的也给个赞吧) 现在前端的就是一直地更新一直有新的东西出来,什么ES2015, ...
- Node.js系列-express(上)
前言 Node.js系列的第一篇:http,大概描述了通过使用node.js内置的api创建一个服务并监听request实现简单的增删改查.现在,我们就通过通读express官网及使用express框 ...
- Nodejs学习笔记(一)—简介及安装Node.js开发环境
一.简介 Node.js是让Javascript脱离浏览器运行在服务器的一个平台,不是语言: Node.js采用的Javascript引擎是来自Google Chrome的V8:运行在浏览器外不用考虑 ...
- Node.js系列——(4)优势及场景
背景 之前几篇系列文章简单介绍了node.js的安装配置及基本操作: Node.js系列--(1)安装配置与基本使用 Node.js系列--(2)发起get/post请求 Node.js系列--(3) ...
- Linux虚拟机中 Node.js 开发环境搭建
Node.js 开发环境搭建: 1.下载CentOS镜像文件和VMWare虚拟机程序; 2.安装VMWare——>添加虚拟机——>选择CentOS镜像文件即可默认安装带有桌面的Linux虚 ...
- atitit.js浏览器环境下的全局异常捕获
atitit.js浏览器环境下的全局异常捕获 window.onerror = function(errorMessage, scriptURI, lineNumber) { var s= JSON. ...
- Nodejs学习笔记(一)--- 简介及安装Node.js开发环境
目录 学习资料 简介 安装Node.js npm简介 开发工具 Sublime Node.js开发环境配置 扩展:安装多版本管理器 学习资料 1.深入浅出Node.js http://www.info ...
- Ember.js系列文章
JS前端框架之Ember.js系列文章 本文为文章索引,主要是罗列Ember.js的相关文章便于阅读. 相关演示代码:github for free. 基础篇 1. EmberJs之What|Why| ...
随机推荐
- dns攻击包代码实现
博客地址:http://home.cnblogs.com/u/zengjianrong/ 代码没有做好精简,有些多余的没有删去,因为博主太懒了哈哈 #include <stdio.h> # ...
- 微信小程序起步
微信小程序 文档 微信小程序开发文档 本质 so微信小程序到底是什么?是原生的app还是H5应用? 简单来说,小程序是一种应用,运行的环境是微信(App)进程中,使用了部分的H5技术 目录介绍 app ...
- fastclick作用
fastclick 是具有消除移动端浏览器上的点击事件的 300ms 的延迟的作用. 注意几点 1.PC端无效 2.Android 上的 Chrome 32+ 浏览器,如果在 viewport met ...
- sentry之二:sentry配置钉钉和email
springboot+springcloud后台项目配置日志采集 gradle: compile 'com.getsentry.raven:raven-logback:8.0.2' compile ' ...
- jquery库与其他库(比如prototype)冲突的解决方法
前端开发很容易会遇到jQuery库与其他库冲突的场景,比如和prototype库冲突. 实际上这种冲突是因为不同的第三方JS库争夺对$标识符的控制权引起的. 解决方法,就是使用jQuery提供的jQu ...
- 关于多个版本的jquery冲突的问题
关于多个版本的jquery冲突的问题 先加载新的版本jquery 然后使用no confi代码,直接上代码看效果 <script src="https://libs.baidu.com ...
- C#使用post方式提交json数据
尝试了一天,尝试了各种方法,一下方法最直接方便. //地址 string _url = "https://www.dXXXayup.ink/api/User/Login"; //j ...
- 配置OEL7 YUM源
用于其他发行版如rhel.centos有时候要用到oracle linux的源来装软件比如oracle.mysql等 配置oel7源 wget http://public-yum.oracle.com ...
- cmake设定boost python3
在mac上操作的.python3是anaconda环境下装的,3.7.1. boost是用brew装的,1.71.0版本. 按照FindBoost.cmake官方写法的CMakeLists.txt: ...
- python socket 传输文件
推荐资料 https://www.cnblogs.com/xiaokang01/p/9865724.html socket传输文件 思路: # 先将报头转换成字符串(json.dumps), 再将字符 ...