js1

作者: 轻描淡写mua | 来源:发表于2017-10-19 19:14 被阅读0次

    一.浏览器组成:

    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

    八.立即执行函数(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

          本文链接:https://www.haomeiwen.com/subject/ewjpuxtx.html