JavaScript部分总结
一、词法结构
1、js里面区分大小写
2、注释分为两类: // 单行注释 /*多行注释*/
3、字面量(直接量 literal)
12 //数字 number
"hello" 'hello' //字符串 string
true false //布尔类型
null //空类型
/js/gi //正则
{x:1,y:2} //字典
[1,2,3,4] //数组
4、标示符(变量)和保留字
5、分号可以省略但是可能会产生问题,js会自动补全;
二、类型、值和变量
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() value()
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 enumetare
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.cteate(null); //o2不能继承任何属性个方法
var o3 = Object.create(Objec.prototype); //空对象和{}new Object()一样
7、属性的操作 作为关联数组的对象
object.property
object["property"] 散列 映射 字典 关联数组
8、继承
继承对象book为null或undefined
book.subtitle.length 会报错
解决方法
var len = book&&book.subtitle&&book.subtitle.lenghth;
删除属性
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:o,
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()
11、对象的三个属性
prototype class extensible attribute
查询对象的原型
ecmascript5 中 Object.getPrototypeOf(o1)
ecmascript3 中 o1.constructor.prototype
通过对象直接量或 new Object()方式创建的对象
包含一个 constructor 的属性,指Object()的构造函数
constructor.prototype 才能真正的原型
p.isPrototypeOf()检测对象p是否是o的原型
//获取对象的类型 字符串
Object.prototype.toString.call(o1).slice(8,-1)
12、对象的可扩展性
对象是否可以新加属性
Object.preventExtensions() 设置对象不可扩展
Object.isExtensible()
Object.seal() 除了将对象设置为不可扩展,还将属性设置为不可配置
Object.freeze()
除了将对象设置为不可扩展,将属性设置为不可配置,还把属性设置为只读、
四、函数
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();
每次调用函数,都会生成一个新的作用域链。包括新的内部变量
JavaScript部分总结的更多相关文章
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收
执行环境有全局执行环境和函数执行环境之分,每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链.函数的局部环境不仅有权访问函数作用于中的变量,而且可以访问其外部环境,直到全局环境.全局执行环境 ...
- 探究javascript对象和数组的异同,及函数变量缓存技巧
javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...
- 读书笔记:JavaScript DOM 编程艺术(第二版)
读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...
- 《Web 前端面试指南》1、JavaScript 闭包深入浅出
闭包是什么? 闭包是内部函数可以访问外部函数的变量.它可以访问三个作用域:首先可以访问自己的作用域(也就是定义在大括号内的变量),它也能访问外部函数的变量,和它能访问全局变量. 内部函数不仅可以访问外 ...
- JavaScript权威指南 - 函数
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...
- JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
今天为大家分享一下我自己制作的浏览器滚动条,我们知道用css来自定义滚动条也是挺好的方式,css虽然能够改变chrome浏览器的滚动条样式可以自定义,css也能够改变IE浏览器滚动条的颜色.但是css ...
- JavaScript进阶之路(一)初学者的开始
一:写在前面的问题和话 一个javascript初学者的进阶之路! 背景:3年后端(ASP.NET)工作经验,javascript水平一般般,前端水平一般般.学习资料:犀牛书. 如有误导,或者错误的地 ...
- 梅须逊雪三分白,雪却输梅一段香——CSS动画与JavaScript动画
CSS动画并不是绝对比JavaScript动画性能更优越,开源动画库Velocity.js等就展现了强劲的性能. 一.两者的主要区别 先开门见山的说说两者之间的区别. 1)CSS动画: 基于CSS的动 ...
随机推荐
- MySQL索引的创建,查看,删除
在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX或ALTER TABLE来为表增加索引. 1.ALTER TABLE ALTER TABLE用来创建普通索引.UN ...
- UVaLive 7269 Snake Carpet (找规律,模拟)
题意:给定一个数字n,表示有n条蛇,然后蛇的长度是 i ,如果 i 是奇数,那么它只能拐奇数个弯,如果是偶数只能拐偶数个,1, 2除外,然后把这 n 条蛇, 放到一个w*h的矩阵里,要求正好放满,让你 ...
- c++的操作符格式记录
以下摘自维基百科,mark一下,以备不时之需. For the purposes of this table, a, b, and c represent valid values (literals ...
- Android下结束进程的方法
转自:http://www.cnblogs.com/crazypebble/archive/2011/04/05/2006213.html 最近在做一个类似与任务管理器的东西,里面有个功能,可以通过这 ...
- contiki Makefile.include 四个关注点<contiki学习之二>
Contiki Makefile.include 笔记 约定: makefile 包括Makefile.Makefile.xxx,并不单指Makefile 不对makefile的语法进行分析,仅仅关 ...
- 基础数据结构 之 队列(python实现)
队也是编程开发中常见的一种数据结构.栈和队可用来模拟函数的递归过程.队的特点为先入先出,主要操作包括入队和出队.入队时需判断队是否已满,出队时需判断队是否为空.下面给出一个队的python实现的例子: ...
- 算法代码[置顶] 机器学习实战之KNN算法详解
改章节笔者在深圳喝咖啡的时候突然想到的...之前就有想写几篇关于算法代码的文章,所以回家到以后就奋笔疾书的写出来发表了 前一段时间介绍了Kmeans聚类,而KNN这个算法刚好是聚类以后经常使用的匹配技 ...
- C++ 不支持模版的分离式编译
1.C++不支持模版的分离式编译,为什么? C++是分别,单独编译,对于每个cpp文件,预编译为编译单元,这个编译单元是自包含文件,编译的时候,不需要其他的文件,编译好了,生成obj文件,然后连接成e ...
- 一个简单的小例子让你明白c#中的委托-终于懂了!
模拟主持人发布一个问题,由多个嘉宾来回答这个问题. 分析:从需求中抽出Host (主持人) 类和Guests (嘉宾) 类. 作为问题的发布者,Host不知道问题如何解答.因此它只能发布这个事件,将事 ...
- C# Process 类的思考
在这里,我先给自己留个印象 下面我们用C#实现一个调用Dos命令的小程序,让大家对系统进程能有个直观的了解.要使用Process类,首先要引入System.Diagnostic命名空间,然后定义一个新 ...