javascript高级程序设计1-3

前言

这是javascript高级程序设计1-3章一些零碎的知识点
javacript = ECMAscript + BOM(浏览器对象模型) + DOM

DOM级别

DOM1级由两个模块组成:DOM核心(DOM Core)和DOM HTML
DOM核心规定的是如何映射基于XML的文档结构;DOM HTML模块则在DOM核心上扩展
DOM2级在DOM1级的基础上扩展了鼠标和用户界面事件、范围、遍历等细分模块,增加了对CSS的支持
DOM3级:引入了DOM加载和DON保存,新增DOM验证

标签对的使用

<script>
    function sayScript(){
        alert("<\/script>")     //用转义符号否则会被当作</script>
    }
</script>
位置在后,如果在里意味着JS代码都被下载、解析和执行完成才显示页面内容,会导致延迟

延迟脚本

<head>
    <script type="text/javascript" defer="defer" src="example.js"></script>
</head>

######包含延迟脚本defer先下载后执行,在遇到后才执行,defer属性只适用于外部脚本

异步加载

<head>
    <script type="text/javascript" async src="example1.js"></script>
    <script type="text/javascript" async src="example2.js"></script>
</head>
异步加载不保证执行顺序

XHTML用法

在XHTML代码解析执行的时候,<(小于) 会被认为是 <> 标签对的一个,所以用下列写法
<script><![CDATA[
    function(){
        if(a < b){
        }
    }
]]></script>
有些浏览器不支持cdata写法,可以注释掉
<script>
//<![CDATA[
    function(){
        if(a < b){
        }
    }
//]]>
</script>
还可以使用HTML实体来完成 < —> <
<script>
    function(){
        if(a &lt; b){
        }
    }
></script>
不过到目前为止,我还没遇到XHTML解析问题出现的bug

JS区分大小写,而且一些函数名不能与关键字和保留字相同

typeof 的使用

用于鉴别给定的变量的数据类型
JS有5种基本数据类型null、undefinded、Boolean、Number、String
1种复杂类型Object
function test(){
    message = 'hi'    //未用var,为全局变量,不推荐这样写
}
test()
alert(message)    //  'hi'
alert(typeof message)  // "string"
alert(typeof test)    // "function"
alert(typeof test())   //undefined  无返回值

Number数值

正无穷Infinity,负无穷-Infinity
能保存的最大的数值Number.MAX_VALUE—>1.7976931348623157e+308,最小的数值Number.MIN_VALUE—->5e-324
NaN–>非数值,not a number,NaN与任何值都不相等,包括本身
isNaN()函数判断是不是非数值,在接收参数后尝试把参数转化为数值,不能被转的返回true,否则为false
isNaN(NaN)  //true
isNaN("10")  //false-->"10"被转化为10
isNaN(true)  //false  true-->1,false-->0
isNaN("String")  //true
console.log(isNaN(null))  //false   null-->0
console.log(isNaN(undefined)) //true  undefined-->NaN
数制转化
num1 = parseInt("123blue")  //123
num2 = parseInt("100",2)  //  100按二进制解析结果为4
num2 = parseInt("100",8)  //  100按八进制解析结果为64  
同理有parseFloat()

Object类型

常用的方法
constructor:保存着用于创建对象的函数
hasOwnProperty(propertyName):用于检查属性在当前对象中是否存在(而不是实例原型)
isPrototypeOf(object):用于检查传入的对象是否是当前对象的原型
valueOf():返回对象的字符串、数值或boolean表示与toString()相同

操作符

var num1 = 20
var num2 = --num1  //此时num2=19  num1=19
var num3 = num1-- //此时num3=19 num1=18  num2=19
var num4 = num1-- + num2  //此时num4=18+19  num1=17
例2
var s1 = 'Z'
s1--  //NaN
var o = {
    valueOf:function(){
        return -1
    }
}
o--  //-2
位操作符,全都化成二进制做,都存的是补码
非NOT ~
var num1 = 25   //二进制 0001001
var num2 = ~num1  //num2=1110110-->-26
与AND &
var num1 = 25 & 3    
分析  00011001
      00000011
&     00000001--->结果为1
或OR |
异或 XOR ^ 相同为0不同为1
左移 <<
有符号右移 >>
无符号右移 >>> 高位补0
布尔操作符
逻辑非
!"blue"  false
!0       true
!""      true
!123     false
!NaN     true
!null    true

逻辑与 &&

如果第一个操作数是对象,返回第二个操作数
如果第二个操作数是对象,只有在第一个为true的情况下才返回第二个操作数对象
如果两个操作数都是对象则,返回第二个

逻辑或 ||

看第一个如果为true就返回true
加减乘除
Infinity*0 –>NaN
操作数不是number,则后台先调用Number()
5+”5” –>55
5-true –>4
var num1 = 5
var num2 = 10
"the number is" + num1 + num2   //the number is 510
"the number is" + (num1 + num2)  // the number is 15 

比较大小问题

null == undefined  //true
"23"<3   //false   "23"-->23
"23"<"3"  //true
"a" < 3   //false  "a"-->NaN   NaN与任何比较都是false
NaN == NaN //false
undefined == 0 //false
null == 0 //false

逗号操作符

var num = (5, 1, 4, 8, 0)  //num = 0 赋值最后一个
label加break、continue
label+break
var num = 0
outermost:
for(var i =0;i<10;i++){
    for(var j = 0; j<10;j++){
        if(i==5&&j==5){
            break coutermost
        }
        num++
    }
}
console.log(num)   //55
label+continue
var num = 0
outermost:
for(var i =0;i<10;i++){
    for(var j = 0; j<10;j++){
        if(i==5&&j==5){
            continue coutermost
        }
        num++
    }
}
console.log(num)   //95

with语句

var a = 1
var qs=localtion.search.substring(1)
var hostname = location.hostname
var url = localhost.href
全部可以简写为
var a = 1
with(localtion){
    var qs=search.substring(1)
    var hostname = hostname
    var url = href
}
a与qs作用于是同级的

参数–>arguments

function test(){
    console.log(arguments.length)   //参数的个数
} 
test()        //0
test("1")     //1
test("1","2")   //2
test({name:"zfl"})  //1

javascript高级程序设计1-3
https://zhangfuli.github.io/2017/09/10/javascript高级程序设计1-3/
作者
张富利
发布于
2017年9月10日
许可协议