美文网首页
js 权威指南

js 权威指南

作者: 自然萌_ | 来源:发表于2019-01-02 16:12 被阅读8次
js 采用的是 二进制浮点数, 在运算符取值的时候是四舍五入
 0.3 - 0.2 = 0.9999999999999999
字符串比大小其实比的是 ASCII 码值, js 字符串是由 ASCII 值来表示 unicode
'two' > 'three'  // 因为 tw 在 ASCII 表中的值 大于 th
合理的分号
var y = x + y
( a + b ).toString()

这段代码会被编译器编译

var y = x + y( a + b ).toString()

很显然这并不是我们想要的
 
null 和 undefined

null是js中的关键字, 为特殊的对象. undefined 表示值未初始化, es5 之前 undefined 可读可写 , es5之后只可读

 typeof null // object
 typeof  undefined // undefined
js 采用的是词法作用域, 变量提升(声明提前)

es6 之前没有块级作用域, 只有函数作用域, 每一个函数会生成一个 作用域对象, 对象上记录所有声明属性.

eval 函数

直接的eval函数更改局部变量,间接的eval更改全局变量

var geval = eval
var x = 'global', y = 'global';
function f() {
    var x = 'local';
    eval("x += 'changed';");
    return x;
}

function g() {
    var y = 'local';
    geval("y += 'changed';");
    return y;
}
console.log(f(), x); // 更改了局部变量: 输出 localchanged, global
console.log(g(), y); // 更改了全局变量: 输出 local ; globalchanged;
prototype(原型链)
  • 通过原型链的继承
通过原型链直接继承, 这种方式不用创建实力节省内存,但是Dog 和 Animal 的 
prototype 指向同一个对象,对 Dog.prototype 的修改会反应在 Animal 上
这并不是我们想要的

 function Animal() {
     this.name = 'animal';
 }

 function Dog() {
     this.age = 8;
 }

 Dog.prototype = Animal.prototype;

 Dog.prototype.constructor = Dog;

 Dog.prototype.sex = '男'

 var animal = new Animal();

 console.log(animal.sex) // 输出 男

 通过原型链间接继承

 function Animal() {
     this.name = 'animal';
 }

 function Dog() {
     this.age = 8;
 }

 Dog.prototype = new Animal();

 Dog.prototype.constructor = Dog;

 var dog1 = new Dog();

 var animal = new Animal();

参考  [阮一峰](http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html)
  • 所有对象的原型最终指向null;
 var obj = new Object;
 obj.__proto__.__proto__  // null
  • 查找自有属性(非继承来的)
    hasOwnProperty (ES5)

  • 通过 prototype 添加的属性和方法都是可枚举的,也就是for in的时候会遍
    历出来(可以通过Object.defineProperty添加属性), Object.keys() 会忽略继 承的属性

  • in 做类型检测的时候会包含继承属性

  • 通过__proto__属性可检测对象原型,但是并不推荐,因为IE没有此属 性,Object.prototype.isPrototypeOf()可以检测原型

只读属性
    var obj = {};
    Object.defineProperty(obj, "prop", {
        value: "test",
        writable: false
    });
禁止类的扩展
  • Object.preventExtensions 可以设置禁止添加任何属性,但是可删除原有属性
  • Object.seal 不可配置属性,但是可读可写
  • Object.freeze 只读不可配置

同源策略

限制范围
  • 无法读取非同源网页的 Cookie、LocalStorage 和 IndexedDB(web端数据库)
  • 无法接触非同源网页的 DOM
  • 无法向非同源地址发送 AJAX 请求(可以发送,但浏览器会拒绝接受响应)。
  • 为了用户安全,浏览器端的脚本语言不能修改和删除本地文件(现在的HTML5中 chrome 实现了 webkitRequestFileSystem api, 可以自沙盒中操作文件, 其他浏览器并未测试)
不严格的同源策略
  • 可以通过 document.domain 来设置同源性
  • Cross-Origin 实现跨域 (详情请看 阮一峰)
  • h5 中的 window.postMessage

H5

  • 应用程序新增了应用缓存,由缓存清单决定缓存
  • window.postMessage 页面消息传递
  • web worker 从此以后js就不再是单线程了, web worker 线程不能访问dom, 它是一个独立的上下文
  • IndexedDB 非关系型数据库
  • Blob (很强大, 具体使用参考 此链接)
  • arrayBuffer

相关文章

  • JS权威指南

    JS权威指南 书中错误p161,isArray 函数中的 Function.isArray => Array.is...

  • js 权威指南

    js 采用的是 二进制浮点数, 在运算符取值的时候是四舍五入 字符串比大小其实比的是 ASCII 码值, js 字...

  • js权威指南笔记

    字符串不是对象,为什么具备属性? 只要引用了字符串的属性,JavaScript 就会将字符串通过new Strin...

  • 读《JS权威指南》

    1、Number类定义的toString()方法可以接收表示转换基数的可选参数,如果不指定则基于十进制。同样,也可...

  • 2017年10月22日

    《Hadoop权威指南》第9章 9.4 P270-P276《Hadoop权威指南》第10章《Hadoop权威指南》...

  • 技术书单

    Java性能权威指南 hadoop权威指南 hbase权威指南 大型网站系统与Java中间件实践 Effectiv...

  • 无标题文章

    # JavaScript权威指南2/3章 ## 第二章:词法结构 ### 2.1字符集 * JS使用Unicode...

  • Object属性及方法

    1.创建对象 1.1对象字面量来创建对象,如下 let book={ title:'js权威指南', auth...

  • Vue.js权威指南

    一、遇见Vue.js 1.MVP,从MVC演化而来,Controller/Presenter负责逻辑的处理,完全把...

  • javascript事件-- js权威指南

    17. 事件处理 异步事件驱动编程模型事件类型只是一个字符串如:‘mouseover’,‘keydown’之类的,...

网友评论

      本文标题:js 权威指南

      本文链接:https://www.haomeiwen.com/subject/hgwzlqtx.html