js

一、词法结构
1、区分大小写
2、注意 // 单行 /* 多行注释 */
3、字面量(直接量 literal)
12 //数字
5.8 // 小数
"hello"
'hello'
true
/js/gi //正则
null //空
{x:1,y:2}
[1,2,3,4]
4、标示符(变量)和保留字
5、分号可以省略但是可能会产生问题,js会自动补;
var y = x+f
(a+b).toString()
等价于
var y = x+f(a+b).toString();
二、类型、值和变量
1、原始类型 数字、字符串和布尔 null空 undefined未定义
2、对象类型
3、类 Array Function Date RegExp Error
4、js解析器 中集成了垃圾回收
5、任意js的值都可以转为布尔值
undefined
null
0
-0
NaN
"" 都被转换为false
6、包装对象
var s= "hello"; //原始类型 (没有方法)
s.len = 4; //当调用原始类型的属性或方法的时候(原始类型是没有属性和方法的)
//只要引用了字符串的属性或方法,就会调用new String(s)把原始类型,包装成对象
//以后调用s.len 是调用String对象的属性和方法,一旦引用结束,新创建的临时对象会销毁
var n = s.len; //此时为undefined
alert(n);

//调用字符串 布尔 数字的属性或方法时,创建的临时对象。是包装对象
显示定义包装对象 var S = new String("hello")
var s = "hello"; 是不同的
7、==和===
8、类型转换
var n = 17;
alert(n.toString(2)); //二进制 10001
alert(n.toString(8)); // 021
alert(n.toString(16)); // 0x21
alert(n.toString(10)); alert(n.toString());
9、toString() valueOf()
var date = new Date(2011,1,3);
date.valueOf() 返回毫秒数代表的时间
10、js是动态类型 var n = 10; 程序运行期间 才会确定变量的类型
11、变量作用域
函数作用域和声明提前
函数内定义的变量 声明自动提前到函数顶部
12、作用域链scope chain
在不包含函数的函数体内,作用域链有两个对象,第一个是定义函数
参数和局部变量的对象,第二个是全局对象。
在一个嵌套函数体内,作用域链上至少有三个对象。

定义一个函数时,它保存了一个作用域链。调用函数时,它创建一个
新的对象存储它的局部变量,并将这个对象添加到保存的那个作用域链
上,同时创建一个新的更长的表示函数调用作用域的“链”。对于嵌套函数
每次调用外部函数时,内部函数会重新定义一遍。每次调用外部函数的时候
作用域链是不同的。
13、delete in eval void

第五章 语句

第六章 对象
1、对象的基本操作 create set query delete test enumerate
2、对象的属性特性 可写 可枚举 可配置(是否可删除)
3、对象的对象特性
对象的原型 prototype
对象的类 标示对象类型的字符串
对象的扩展标记 是否可添加新属性
//创建对象的三种方法
4、对象直接量
var empty = {};
var point = {x:0,y:0};
5、new创建对象
var o = new Object(); //空对象 和{}一样
var a = new Array();
6、Object.create()
var o1 = Object.create({x:1,y:2}); //o1 继承自对象原型{x:1,y:2}
var o2 = Object.create(null); //o2不继承任何属性和方法
var o3 = Object.create(Object.prototype);
//空对象和 {} new Object()一样
7、属性的操作 作为关联数组的对象
object.property
object["property"] 散列 映射 字典 关联数组
8、继承
js的继承只能从父类获取属性的值,而不能修改原型链
如果对象book为null或undefined
book.subtitle.length会报错
解决方法
var len = book && book.subtitle && book.subtitle.length;

删除属性
delete book.subtitle

检测属性 in hasOwnPreperty() propertyIsEnumerable()
var o = {x:1};
"x" in o
"toString" in o

hasOwnPreperty();判断属性是否是自己的。继承属性返回false

propertyIsEnumerable() 只有是自有属性,并可枚举

获取所有属性
Object.keys()
Object.getOwnPropertyNames()
9、属性getter和setter
var o = {
x: 0,
y: 1,
set r(value) { value = this.r;},
get r() { return this.x + this.y;}
};
x数据属性,r存取器属性
10、属性的特性 ecmascript5 老的ie不支持如下用法
数据属性的特性:值value 可写性writable
可枚举enumerable
可配置configurable
存取器属性特性:get set
可枚举enumerable
可配置configurable
//返回{value:1,writable:true,emunerable:true,configurable:true}
Object.getOwnPropertyDescriptor({x:1},x)
//查不到属性 返回undefined

设置属性的特性 不能修改继承的属性特性
Object.defineProperty()
//设置不可枚举属性
var o = {};
Object.defineProperty(o,"x",{
value:1,
writable:true,
emunerable:false,
configurable:true
})

//设置只读
Object.defineProperty(o,"x",{writable:false})

修改多个属性特性
Object.defineProperties()

扩展Object.prototype 书 P137
11、对象的三个属性
prototype class extensible attribute

查询对象的原型
ecmascript5中 Object.getPrototypeOf(o1)
ecmascript3中 o1.constructor.prototype

通过对象直接量或new Object()方式创建的对象
包含一个constructor的属性,指Object()的构造函数
constructor.prototype才是真正的原型

p.isPrototypeOf(o)检测对象p是否是o的原型

//获取对象的类型 字符串
Object.prototype.toString.call(o1).slice(8,-1)
12、对象的可扩展性
对象是否可以新加属性
Object.preventExtensions() 设置对象不可扩展
Object.isExtensible()
Object.seal() 除了将对象设置为不可扩展,还将属性设置为不可配置
Object.freeze()
除了将对象设置为不可扩展,将属性设置为不可配置,还把属性设置为只读

第8章 函数
1、函数调用,方法调用
function t(){ }
t(); 函数调用 this是全局对象 严格模式下是undefined

var o = {a:function(){}};
o.a() 方法调用 this是当前调用的对象
2、构造函数调用
var o = new Object(); var o= new Object;
o继承自构造函数的prototype属性 内部的this是此对象

var r = new o.m();中的this不是o
3、P184 函数的执行用到了作用域链,这个作用域链是函数定义的时候创建的。
嵌套的函数f()定义在这个作用域链里,其中的变量scope是局部变量

作用域链

调用s()将创建函数s的执行环境(调用对象),并将该对象置于链表开头,
然后将函数t的调用对象链接在之后,最后是全局对象。然后从链表开头寻找变量name

调用ss() ss() ==> t() ==> window
name="lwy";
function t(){
var name="tlwy";
function s(){
var name="slwy";
console.log(name);
}
function ss(){
console.log(name);
}
s();
ss();
}
t();

每次调用函数,都会生成一个新的作用域链。包括新的内部变量

js学习要点的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. js学习之变量、作用域和内存问题

    js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...

  3. 【Knockout.js 学习体验之旅】(3)模板绑定

    本文是[Knockout.js 学习体验之旅]系列文章的第3篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  4. 【Knockout.js 学习体验之旅】(2)花式捆绑

    本文是[Knockout.js 学习体验之旅]系列文章的第2篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  5. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  6. js学习篇1--数组

    javascript的数组可以包含各种类型的数据. 1. 数组的长度 ,直接用 length 属性; var arr=[1,2,3]; arr.length; js中,直接给数组的length赋值是会 ...

  7. Vue.js学习笔记(2)vue-router

    vue中vue-router的使用:

  8. NODE.JS学习的常见误区及四大名著

    NODE.JS学习的常见误区及四大名著 前段时间由于不满于社区里很多人对于NODE.JS的种种误解而写了一篇文章名为: NODE.JS之我见:http://www.cnblogs.com/pugang ...

  9. 【C#】第3章学习要点(一)--整体把握

    分类:C#.VS2015 创建日期:2016-06-18 使用教材:(十二五国家级规划教材)<C#程序设计及应用教程>(第3版) 一.使用别人已经设计好的类简化你的代码编写工作量 当让你去 ...

随机推荐

  1. golang的Channel

    golang的Channel Channel 是 golang 一个非常重要的概念,如果你是刚开始使用 golang 的开发者,你可能还没有真正接触这一概念,本篇我们将分析 golang 的Chann ...

  2. WeQuant交易策略—RSI

    RSI指标策略 策略介绍 RSI(相对强弱指标),是通过一段时期内的平均收盘上涨和下跌数,计算价格上涨所产生的波动占整个波动的百分比,来分析市场买卖盘的意向和实力. 计算公式(以日为单位举例) RSI ...

  3. BotVS开发基础—2.7 指标MA

    代码 #计算一小时 MA5均线 # 时间 2017-06-29 00:00:00 -2017-06-30 00:00:00 1小时 实盘级Tick # 平台 OCKCoin BTC def main( ...

  4. Java中的方法

    Java方法/函数 方法的定义: Java方法是语句的集合,他们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 方法的优点 使程序 ...

  5. Ubuntu安装卸载anaconda

    安装要点: 1.在Anaconda官网https://www.continuum.io/downloads内下载需要的版本: 2.打开终端--进入下载安装包所在的文件夹(cd 文件名)--输入命令:b ...

  6. Map中的entrySet();跟keySet();的区别是什么

    JAVA中entrySet();跟keySet();的区别是什么 红叶_书生 | 浏览 10397 次  2014-04-10 10:45 2014-04-10 10:49   最佳答案   keyS ...

  7. jQuery遍历-过滤

    缩写搜索元素的范围 三个最基本的过滤方法是:first(), last() 和 eq(),它们允许您基于其在一组元素中的位置来选择一个特定的元素. 其他过滤方法,比如 filter() 和 not() ...

  8. linux(十四)之linux NFS服务管理

    学到这里差不多就结束了linux的基础学习了,其实linux的内容并不难,我们要经常的反复的去操作它,多多和它去联络感情才能很好的掌握这个linux. 加油!今天是星期二.没有什么比努力让人更加热血沸 ...

  9. Cookie常用操作以及属性

    概述 最近项目要用到cookie存储部分用户信息;研究了一下做一下分享 Cookie 是服务器保存在浏览器的一小段文本信息,每个 Cookie 的大小一般不能超过4KB.浏览器每次向服务器发出请求,就 ...

  10. android monkey测试学习

    前提是:有安卓环境,能用adb命令 一.Monkey 测试的目的? 该工具可用于测试稳定性. 开发人员结合monkey 打印的日志 和系统打印的日志,解决测试中出现的问题 二.Monkey 测试的特点 ...