JS权威指南阅读笔记
2019独角兽企业重金招聘Python工程师标准>>>
词法结构
- unicode以\u为前缀,其后跟随4个十六进制数
- 标识符必须以字母、下划线或$开始,后续字符可以是字母、数字、下划线或$。
类型、值和变量
- js数据类型分为两类:原始类型和对象类型
- 原始类型包括:Number,String和Boolean
- 两个特殊原始值:null和undefined
- js解释器有自己的内存管理机制,可以自动对内存进行垃圾回收(Garbage Collection)。
- js整数范围是 -2^53 ~ 2^53
- 无穷大可以用Infinity表示
- Infinity = Number.POSITIVE_INFINITY = 1/0 = Number.MAX_VALUE + 1
- 非数字值用NaN
- NaN = Number.NaN = 0/0 = Number.MIN_VALUE/2
- -NaN和任何值都不相等,包括自己。要使用x!=x来判断x是否是NaN或者使用isNaN()
- 二进制浮点数表示法不能精确表示类似0.1这样的数字:
var x = .3 - .2;
var y = .2 - .1;
x == y; // false
- String是一组16位值组成的不可变的有序序列
- undefined,null,0,-0,NaN,"" 都会被转换成false,其他值包括对象(数组)会转换成true
- null执行typeof运算,结果返回"object"
- 两个单独的对象永不相等,两个单独的数组永不相等:
var o = {x:1},p = {x:1};
o == p; // => false
o === p; // => false
var a = [], b = [];
a == b; // => false
a === b; // => false
- Javascript类型转换
值 | 转换为 | - | - | - |
---|---|---|---|---|
- | 字符串 | 数字 | 布尔值 | 对象 |
undefined | "undefined" | NaN | false | throws TypeError |
null | "null" | 0 | false | throws TypeError |
true | "true" | 1 | - | new Boolean(true) |
false | "false" | 0 | - | new Boolean(false) |
"" | - | 0 | false | new String("") |
"1.2" | - | 1.2 | true | new String("1.2") |
"sevens" | - | NanN | true | new String("sevens") |
0 | "0" | - | false | new Number(0) |
-0 | "0" | - | false | new Number(-0) |
NaN | "NaN" | - | false | new Number(NaN) |
1 | "1" | - | true | new Number(1) |
{} | 参考3.8.3节 | 参考3.8.3节 | true | |
[] | "" | 0 | true | |
[9] | "9" | 9 | true | |
['a'] | 使用join方法 | NaN | true | |
function(){} | 参考3.8.3节 | NaN | true |
- 关于==相等性判断
null == undefined; // true
"0" == 0; //比较前字符串转换成数字 true
0 == false; //布尔转换成数字 true
"0" == false; //字符串和布尔值都转换成数字 true- 对日期对象进行转换
````javascript
var now = new Date();
typeof (now + 1); // => string , "+"将日期转换成了字符串
typeof (now - 1); // => Number: "-" 将对象转换成了数字
声明提前
var scope = "global";
function f(){console.log(scope); // undefinedvar scope = "local";console.log(scope); // local
}
由于局部变量在整个函数体始终都有定义的,就是说,在函数体内局部变量遮盖了同名全局变量。但是!只有在执行到var的时候才会被赋值。因此,上面的代码相当于:
var scope = "global";
function f(){var scope;console.log(scope); // undefinedscope = "local";console.log(scope); // local
}
- 作用域链 *
表达式和运算符
- 2 + null => 2
- 2 + undefined => NaN
- "==" 会将左右两边值如果不存在字符串则先转换数字类型再比较,转换图看上面。
语句
- 如果var语句出现在函数体内,那么它定义的是一个局部变量,作用域是这个函数。如果在顶层代码中使用var语句,它声明的是全局变量,在整个javascript程序中都是可见的。var声明的全局变量是无法通过delete删除的。
- 因为for/in循环中variable的值可以当做赋值表达式的左值,可以利用for..in..快速将一个对象的属性key复制到数组中:
var o = {x:1,y:2,z:3};
var a = [],i = 0;
for(a[i++] in o) ;
- "use strict" 作用在使用指定的作用域
对象
- 模拟继承,通过原型继承创建一个新对象
function inherit(p) {if (p == null) throw TypeError();//如果Object.create()存在,则直接使用它if (Object.create)return Object.create(p)//否则进一步检测var t = typeof p;if (t !== "object" && t !== 'function')throw TypeError();//定义一个空构造函数function f() {}; //将其原型属性设置为pf.prototype = p;return new f();
}
- inherit()函数的其中一个用途就是防止库函数无意间修改那些不受我们控制的对象。不是将对象直接作为参数传入函数,而是将它的继承对象传入函数。
- var len = book && book.subtitle && book.subtitle.length
- 通过in,hasOwnProperty()来判断目标对象是否存在目标属性
- 数据属性的描述符对象的属性有value,writable,enumerable和configurable.
- 复制属性的继承函数
Object.defineProperty(Object.prototype,"extend",{writable: true,enumerable: false,configurable: true,value: function (o){//得到所有自有属性,包括不可枚举属性var names = Object.getOwnPropertyNames(o);//遍历for (var i = 0; i < names.length; i++){if (names[i] in this) continue;var desc = Object.getOwnPropertyDescriptor(o,names[i]);Object.defineProperty(this,names[i],desc);}}}
);
To be Continue..
转载于:https://my.oschina.net/u/203607/blog/1784837
JS权威指南阅读笔记相关推荐
- MyCat权威指南阅读笔记(基础篇)
1.1何为数据切分? 简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主 机)上面,以达到分散单台设备负载的效果. 数据的切分(Sharding)根据其切分规 ...
- Postfix权威指南-阅读笔记-架设和维护邮箱服务器
PostFix权威指南 目录 文章目录 适用人群 前言 1. 简介 Internet E-mail传递流程 2.基础概念 在线说明书 模拟SMTP对话 常见响应状态码 4.基本的配置与管理 默认安装目 ...
- HTTP权威指南阅读笔记五:Web服务器
Web服务器会做些什么: 1.建产连接:接受一个客户端连接,或者如果不希望与这个客户端建立连接,就将其关闭. 1)处理新连接 2)客户端主机名识别 3)通过ident确定客户端用户 ident在组织内 ...
- Hadoop权威指南阅读笔记
2019独角兽企业重金招聘Python工程师标准>>> 1.MR和关系型数据 MR和传统的关系型数据库处理的数据是不同,传统关系型数据库处理的是较结构化数据,对于半结构化和非机构话数 ...
- HTTP权威指南阅读笔记一:HTTP概述
HTTP协议版本: 1.HTTP/0.9:HTTP的1991原型版本称为HTTP/0.9.这个协议有很多严重的缺陷,只应该用与与老客户端的交互.HTTP/0.9只支持GET方法,不支持多媒体内容的MI ...
- JavaScript 权威指南-学习笔记(一)
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! JavaScript 权威指南-学习笔记 ...
- mysql数据库权威指南_MySQL_MySQL权威指南读书笔记(三),第二章:MYSQL数据库里面的数 - phpStudy...
MySQL权威指南读书笔记(三) 第二章:MYSQL数据库里面的数据 用想用好MYSQL,就必须透彻理解MYSQL是如何看待和处理数据的.本章主要讨论了两个问题:一是SQL所能处理的数据值的类型:二是 ...
- 开奖及送书|《Vue.js权威指南》
2020 06 15 今天距2021年199天 这是一页河山第135次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 07:30准时推送. 微信公众号后 ...
- HTTP权威指南读书笔记
<<HTTP权威指南>>读书笔记 第一部分:Web的基础 第1章:HTTP概述 主要内容 1.什么是HTTP 2.HTTP的基本组件 HTTP HTTP:HTTP(Hypert ...
最新文章
- Shiro安全登录框架
- 模拟 Codeforces Round #249 (Div. 2) C. Cardiogram
- UIImage加阴影
- Win32 API 窗口版本转换度分秒为小数
- 【转载】Linux下有趣的命令
- 从C语言过渡到C++并不容易啊,大家说呢?
- mysql 把一个字段的值_mysql把一个表某个字段的内容复制到另一张表的某个字段的SQL语句写法...
- android 应用切换动画,怎么在Android应用中利用Activity对动画进行切换
- python contains类似函数_Python也能做到Excel那样,条件统计轻松解决工作需求
- libcareplus应用于Qemu-6.1.0
- 手把手教学电信天翼校园接入无线路由器(Windows Server版)
- JSP——在JSP中嵌入java代码
- Win11键盘锁住怎么恢复?
- 僵尸网络“Mykings”
- JNI_编程技术__网文整理(中)
- 9.4 网易互娱客户端笔试
- 419. 甲板上的战舰
- 计算机树的逻辑结构,树结构(示例代码)
- ubuntu 向日葵连接后即断开解决办法
- 高德地图地理编码和逆地理编码,以及逆地理编码的时候如何去掉省、市、镇