js1

一.浏览器组成:

1.shell

2.内核:

•渲染引擎(语法规则和渲染)

•JS引擎

•其他模块

二.JS的特点:

1.单线程

2.解释性语言

解释性语言优点:(不需要编译成文件)跨平台

缺点:效率低

编译性语言优点:效率高

缺点:不跨平台

三.JS三大部分

ECMAScript   DOM   BOM

四.如何引入JS

页面内嵌标签

外部引入“location”>

(为符合web标准(w3c标准中的一项)结构、样式、行为相

分离,会采用外部引入)

该标签有如下六个属性:

1.async:表示应该立即下载脚本,但不妨碍页面中其他操作,如下载其他资源(立即下载,但不能保证先后顺序执行,要确保文件独立性)

2.charset:很少使用,浏览器会自动忽略

3.defer:表示脚本可以延迟到文档完全被解析和显示后执行(立即下载,但延迟执行)

4.language:已废弃

5.src:表示包含要执行代码的外部文件

6.type:可以看成是language的替代属性,表示编写代码使用的脚本语言类型,通常我们使用“text/javascript”

注意:

defer=”defer”

async=”async”

嵌入代码与外部文件

外部文件的优点:

1.可维护性高

2.可缓存:即当两个页面加载同一内容,外部文件只需下载一次

3.未来适应性高

三.js基本语法

1.变量:

js采用单一var原则,声明赋值相分解,为提高效率,尽量在同一处声明所有变量

2.值类型----数据类型

Ø不可改变的原始值(栈数据)

Number,String,Boolean,undefined,null

Ø引用值(堆数据)

array, object, function

3.js规则:

js语法错误会引发后续代码终止,但不会影响其它js代码块

字符串比较:如果第一个字符比较成功,则不进行下一位的比较。

4.&& ||!逻辑运算符:

&&短路语句:全真为真,否则为假

var

a=1+1&&123;

&&两侧为表达式,计算后转换为bool类型,进行&&运算

fn&&fun(fn)用于判断fn是否有值

||有一个真即为真,全假为假:

var a=1||2;

第一个表达式为真就不往后看

!用于取反

!!可用于查看布尔值

& |按位与或

Eg:

if(2>0>0)=true>0

5.Typeof():返回值都是字符串类型

六种数据类型:

NumberstringBooleanundefinedobjectfunction

6.类型转换:

1.隐式类型转换

2.显示类型转换

3.不发生类型转换

一.隐式类型转换:

isNaN ()

++/—+/-(一元正负)

+

*/%

&& ||

<><=>=

== !=

二.显式类型转换:

Number(mix)

parseInt(string,radix)

parseFloat(string)

toString(radix)

String(mix)

Boolean()

Number()转换结果

true/false--->1/0,数字字符串,null--->0;undefined--->NaN

parseInt():parseInt(目标数,基底)

将目标数以基底为进制转换为十进制转成整形

从第一位开始,到非数字为截止,转换成数字

不可以转bool类型

parseFloat()

目标数转换成浮点数

找到第一个小数点后到第一个非数字位为止

String()变成字符串

Boolean()结果为false

undefind/NaN/""/0/null/false(undefined==null

toString()

undefined/null不能用toString

toString(基底)将目标数转换成基底进制后变为字符串

NaN不等于任何东西,包括自身,在判断时用字符串比较(NaN==”NaN”

undefined==null,二者均不大于0,不小于0.不等于0

===:绝对等于

toFixed():科学记数法四舍五入保留有效数字

四.函数:

函数声明:function_name(argument) {

//body...

}

函数表达式

1.命名函数表达式vartext=function text() {

// body...

}

2.匿名函数表达式var demo=function () {

//body...

}

五.数组:

arr.length()数组长度

arguments.length()实参长

text.length()形参长

六.预编译:

1.变量声明提升

2.函数声明整体提升

imply global:未经声明就赋值为暗示全局变量

此对象为window所有

eg:

a=100;

var a=b=123;

一切声明的全局变量全是window属性

局部变量预编译

1.创建AO对象

2.找形参和变量声明,将形参和变量声明作为属性名,值为undefined

3.将实参和形参同一

4.找函数声明,值赋为函数体

全局变量预编译GO{}

GO===window

所以访问全局可以不用打window

1.创建GO对象

2.找变量声明

3.找函数赋值函数体

七.闭包:

当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄露。

eg:functionadd() {

var num=0;

functiona() {

document.write(++num);

}

return a;

}

var myadd=add();

myadd();

myadd();

此时a函数中保留了add函数之前的go和ao(这是在a函数定义是就存在的)

所以当myadd被调用时,访问的是同一个num

js1_第1张图片

八.立即执行函数(function (形参) {}(实参)):立即执行,执行后立马销毁

仿佛是专门用来解决闭包问题的

eg:

var sum=(function (a,b) {

returna+b;

}(1,2));

只有表达式才能被执行(声明不可以执行!)

+-!()可以进行隐式类型转换将声明转换成表达式,所以(function(a,b){})(a,b)也叫立即函数(不标准形态)

数学括号优先级大于执行括号

eg :

function text() {

vararr=[];

for(vari=0;i<10;i++)

{

(function(j){

arr[j]=function()

{

document.write(j);

}

}(i))//这样就可以保存当时的i,如果套在内部,则当时打印

}

returnarr;

}

var myarr=text();

for(var j=0;j<10;j++)

{

myarr[j]();

}

逗号运算符概念:返回最后一个结果

typeof空格相当于typeof()

九.对象:

delete:

删除对象属性

delete+空格+对象的属性

返回值为true

var obj={}对象字面量/对象直接量

构造函数

{

1.系统自带

2.自定义

}

系统自带:Object(),Array(),Number(),String(),Boolean(),Date()

var obj1=new Object();

构造函数与正常函数没有区别,为了区别构造函数与普通函数,我们将构造函数首字母大写

1.变量命名原则:

多个单词组成的变量遵循小驼峰式命名:theFirstName

构造函数命名规则遵循大驼峰式命名:MyStudent

2.构造函数原理:

new关键字在函数开头中隐式的创建this空对象,然后隐式的return this(返回对象)

如果强制返回引用值,则忽略隐式返回,如果强制返回原始值,则忽略原始值

包装类:

Number(),String(),Boolean()包装类不能增加属性

十.原型:

_开头的属性带有私密性

construct:构造者通过这个属性可以访问到构造者

__proto__:默认值是该构造函数名.原型

function person() {

//body...

}

person.prototype.name="p";

varo=new person();

person.prototype={

name:"a",

cc:"1"

}

console.log(o);

*在js中引用值中存的是地址,如果原始地址被更改的话,引用值中存的地址不变,

*__proto__中存的是person.prototype的地址,如果person.prototype的地址发生改变,this只有当new的时候才会被创建,__proto__指向的地址不变,所以导致上述情况发生

原型链的顶端是object.prototype到了头浏览器会返回null

__proto__指向的是父级的prototype

继承:

传统js继承方法:构造父级对象作为子级的原型

圣杯模型:利用闭包原理构造一个空函数,该函数原型与父级原型相同,作为缓冲区存在(作为继承函数)

你可能感兴趣的:(js1)