1、JS分三个部分:ECMAScript、DOM、BOM
1)ECMAScript:提供核心语言功能
2)DOM:提供访问和操作网页内容的方法和接口
3)BOM:提供与浏览器交互的方法和接口
2、在html页面写js代码,需要将代码放在<script></script>;并且中间不能出现字符串“</script>”
下方这个代码会报错:alert("</script>");
可以对它进行转义: alert("<\/script>");
3、如果引用外部JS文件时,在标签内的JS代码将被忽略
4、js的六种数据类型:Undefined、Null、Boolean、Number、String、Object
可以用typeof运算符来检测变量类型;
--如果值为null,返回 “object”//null被认为是一个空的对象引用
--如果是函数,返回 “function”
--变量为声明或者声明未初始化,返回“undefined”
5、undefined 派生自 null ;
所以 undefined == null ;//true
6、利用函数Boolean(), 任何类型的值都可以转为布尔类型;
空字符串、0、NaN、null 、undefined 为false,其他值为true;
7、Number类型的表现形式:十进制、八进制、十六进制
--八进制: 以0开头,var num1 = 070; //对应十进制56
--十六进制:以0x开头,var num2 = 0xA; //对应十进制的10
扩展:JS的浮点数是基于IEEE754 64位标准(二进位浮点数标准);
造成的bug:0.1 + 0.2 != 0.3
8、 0 / 0 = NaN; 1 / 0 = infinity; -1 / 0 = -infinity;
9、parseInt() 可以解析:十进制、十六进制字符串;
parseFloat() 只能解析十进制字符串
10、求一个负数的二进制表现形式
1)先获得正数的二进制;
2)获取反码,即 0 和 1互换
3) + 1
11、switch 比较值时适用的是全等;
12、函数中传递参数,如果是引用类型,也是按值传递的。
function setName(obj) {
obj.name = "llm";
obj = new Object();
obj = "llm1";
}
var person = new Object();
setName(person);
alert(person.name); // llm
可以理解为它是一个局部的引用传递
13、垃圾收集算法
1)标记清除 (目前主流):对变量打标记(进入环境、离开环境),然后垃圾收集器再按照固定的时间间隔对这些变量进行回收
2)引用计数(不常用)会出现循环引用的问题,而导致内存得不到清除;
14、执行环境分为:全局执行环境和函数执行环境
15、创建对象的两种方法
1) var person = new Object();
2) var person = {};
16、访问对象的两种方式
1)通过‘点’来访问: person.name
2)通过方括号 : person["name"] //它的优势在于可以使用变量来获取对象的属性 person[变量]
17、判断某个对象属于哪种类型的实例,可以通过 instanceof;
判断Array,可以使用自带的方法: Array.isArray(value);
18、栈:后进先出
队列:先进先出
19、数组的方法:
--push() 往数组末尾追加数据,并返回改变后的数组长度
--pop() 移除数组末尾的值,并返回该结果
--shift() 移除第一项的值
--unshift() 在数组起始位置插入值
--reverse() 反转数组
--sort() 默认按照字符串的规则,进行升序排序
可以传递一个比较函数来决定哪个值在前面,
20、Date对象相关方法
--getTime() 获取日期对应的总毫秒数; 与valueof()一样
--getFullYear() 获取四位数年份
--getMonth() 获取月份,从0开始
--getDate() 获取天数
--getDay() 获取星期几 ; 0 星期日 ,6星期六
--getHours() 获取小时数
--getMinutes() 获取分钟数
--getSeconds() 获取秒数
--getMilliseconds() 获取毫秒数
21、RegExp类型: 正则表达式
var expression = / pattern / flags ;
--pattern 表示 正则表达式
--flags 表示匹配的标志:g、i、m,可以组合使用;
1) g 表示全局搜索;
2)i 表示忽略大小写
3)m 表示多行搜索
22、Function 类型
函数实际上是对象;而函数名只是指向对象的指针;
var hello = function(){};
所以才没有重载;如果定义多个相同的函数时,JS解析时从上到下,所以最终函数名指向了最后一个函数;
23、定义函数的两种方式:
1、函数声明:function hello(){}
2、函数表达式 var hello = function(){};
两者的区别:
1)解析器会对函数声明做一个声明提前的过程;也就是说,不论这个函数在哪个位置定义的,都可以预先使用
2)而函数表达式,只有执行到当前代码行时,才会被解析执行;
24、基本包装类型:String、Boolean、Number;它是一种特殊的引用类型
虽然它们三个属于基本类型,基本类型不属于对象,所以不应该有方法和属性;
但是我们知道string有许多方法,比如substring();那这是为什么呢?
var str = '123123123'; var str1 = str.substring(2);
这行代码,后台做了三个操作
1)创建String类型的一个实例 var str = new String('123123123');
2)调用了这个实例的方法 str.substring(2);
3)销毁这个实例 str = null;
25、基本包装类型和引用类型的区别:在于生命周期;
-- 引用类型的生命周期:在离开当前作用域之前一直存在
--基本包装类型: 一行代码的执行瞬间;
26、encodeURI() 和encodeURIComponent()的区别
1)encodeURI 对冒号、正斜杠、#不会进行编码
2)encodeURIComponent会对冒号、正斜杠、#等特殊符号进行编码;
27、 eval() 方法相当于一个完整的ECMAScript解析器,它可以解析JS代码字符串;
--需要注意的是:严格模式下,eval()中定义的变量,在外部访问不到;
28、工厂模式:批量创建类似的对象
function createPerson(name){ var obj = new Object(); obj.name = name; return obj; }
29、构造函数模式:通过new来调用函数
function Person(name){ this.name = name; }
var person = new Person();
30、原型模式
创建的每个函数都有一个属性prototype指向一个对象,这个对象包含所有实例共享的属性和方法;
31、hasOwnProperty() 可以判断属性是否属于某个实例的
--true表示 属于
32、in操作符 可以判断实例是否含有某个属性,无论是存在于实例上还是原型上
33、每个函数都有一个prototype属性,这个属性指向一个对象;这个对象包含所有实例共享的属性和方法;
function Person(){};
Person.protype.name = 'haha';
Person.prototype 这个属性将包含所有实例共享的属性和方法;
var llm = new Person();
alert(llm.name); // haha
而每个实例都有一个属性 [__proto__] ,指向原型对象;
alert( llm.__proto__.name ); //haha
34、原型对象造成的问题:
1、创建的实例都有固定的属性值;
2、如果原型中的属性值是 引用类型,那么通过某个实例修改其中的值,其他的实例也会相应改变;
——————————
解决办法:通过构造函数和原型模式组合使用;
1)构造函数:用于定义实例属性
2)原型模式:用于定义方法和共享的属性;
function Person(name){ this.name = name; }
Person.prototype.sayName = function(){ alert(this.name); }
_________________________
上面这种方法已经很好的解决问题了。但是写法不够优雅;
【动态原型模式】将原型模式写在构造函数中
function Person(name)
{
this.name = name;
if(typeof this.sayName != "function"){
//如果这个方法不存在,则进行创建
Person.prototype.sayName = function(){ alert(this.name); };
}
}
33、arguments.callee 表示正在执行的函数的指针; 严格模式下会出错;
function factorial( num ){
return num * arguments.callee(num-1);
}
34、修改 window.location.href 值,会自动调用 location.assign()方法,会生成历史记录;
location.replace() 则不会生成历史记录;
35、scrollIntoView() 在element上调用这个方法,会将滚动条滚动至该元素上;
var div = document.getElementById('div1');
div.scrollIntoView();
- js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定
js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定 addEventListener()与removeEventListener( ...
- JS高级程序设计 笔记
1.instanceof 可以判断实例是否在某个对象的原型上: function A() { this.a = "a"; } function B() { this.b = &qu ...
- js高级程序设计 笔记 --- 错误处理、json和ajax
1,错误处理 1,try-catch语句 try{可能导致错误的代码} catch(error) {在错误发生时该怎么处理} error.message是所有浏览器都支持的属性. finally语句是 ...
- js高级程序设计 笔记 --- 表单
一,基础知识 在html中,表单是form元素,而在js中,表单对应的是HTMLFormElement类型,继承自HTMLElement,其独特的属性和方法有(常见): action:接收请求的URL ...
- js高级程序设计 笔记 --- DOM
DOM是针对HTML和XML文档的一个API.DOM描绘了一个层次化的节点树,允许开发人员添加.移除和修改页面的某一部分. 1,节点层次 DOM可以将任何HTML或XML文档描绘成一个由多层节点构成的 ...
- js高级程序设计 笔记 --- 面向对象的程序设计
1,理解对象 通过对象字面量的方式,创建一个对象,为它添加属性和方法: var obj = { a: 1, b:2, sayA(){ console.log(this.a)}} 1,属性类型: 数据属 ...
- js高级程序设计 笔记 --- 引用类型
一,变量和作用域 1, js变量可以保存两种类型,基本类型.引用类型和symbol类型,基本类型有5种:undefined.null.boolean.number.string,它们都有以下的特征 基 ...
- JS高级程序设计笔记一
/*设置自定义属性*/ var div=document.querySelector("#div1"); div.setAttribute("title",&q ...
- 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图
读书笔记 - js高级程序设计 - 第十三章 事件 canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好 有时候即使浏览器支持,操作系统如果缺缺 ...
随机推荐
- (中等) HDU 3335 , DLX+重复覆盖。
Description As we know,the fzu AekdyCoin is famous of math,especially in the field of number theory. ...
- POJ3255次短路
POJ3255 题意:给定一个图,求从1到n的次短路 分析:我们需要在dijkstra上作出一些修改,首先,到某个顶点v的次短路要么是到其他某个顶点u的最短路在加上u到v的边,要么是到v的次短路再加上 ...
- Leetcode题1
Given an array of integers, find two numbers such that they add up to a specific target number. The ...
- WCF必须使用证书验证吗
你说的 ASP.NET Web Service在消息头里加个字段,服务端做验证,这个是可以的,但是无法保证传输的用户名和密码是加密安全的. 要求使用证书,也是强制服务器端,这里涉及到服务器身份鉴别的问 ...
- Unity3D ——强大的跨平台3D游戏开发工具(六)
第十一章 制作炮台的旋转 大家知道,炮台需要向四周不同的角度发射炮弹,这就需要我们将炮台设置成为会旋转的物体,接下来我们就一起制作一个会旋转的炮台. 第一步:给炮台的炮筒添加旋转函数. 给炮台的炮筒部 ...
- sql语句的截取字符串下标是从1开始
这里的指的sqliter数据库 substr函数 substr(date,1,10)
- 阿里云安装wordpress遇到的问题
在阿里云服务器上安装Nginx,php5.3.3环境,使用阿里云的RDS数据库 1,安装wordpress,提示您的PHP似乎没有安装运行WordPress所必需的MySQL扩展 解决方案:移除已经安 ...
- C # 产生鼠标点击事件
新建一个WinFrom,找到MouseDown,回车,生成代码如下点击的效果如图 参考文章:http://blog.csdn.net/u012842807/article/details/454143 ...
- pageX,clientX,offsetX,layerX的那些事
在各个浏览器的JS中,有很多个让你十分囧的属性,由于各大厂商对标准的解释和执行不一样,导致十分混乱,也让我们这些前端攻城狮十分无语和纠结>_< John Resig大神说过,动态元素有3个 ...
- PHP新手之学习类与对象(3)
四.访问控制 对属性或方法的访问控制,是通过在前面添加关键字 public.protected 或 private 来实现的.由 public 所定义的类成员可以在任何地方被访问:由 protecte ...