JS1-6

JS 1-6

1.语法

1.1 使用

第一种
<html>
  <head>
  	<script>
      JS goes here...
    </script> 
  </head>
  <body>
    ...
  </body>
</html>


第二种
<html>
  <head>
  	<script src="file.js"></script> 
  </head>
  <body>
    ...
  </body>
</html>

第三种(最好)
<html>
  <head>
  </head>
  <body>
    ...
    <script src="file.js"></script> 
  </body>
</html>

程序设计语言分为解释性和编译型。

1.2 基本语法

statement;statement;

statement;
statement;


//注释  建议使用

/*多行
注释   建议使用*/


<!-- JS单行注释
<!-- html单行注释-->

驼峰格式是函数名、方法名和对象属性命名的首选格式。

给变量命名,用下划线来分隔各个单词。

字面量即常量。

js变量名允许包含字母数字下滑想和$,首字符不能为数字。

转义
'don\'t'
"don't"  不需转义

1.3 数据类型


1.3.1 字符串
1.3.2 数值
1.3.3 布尔值true/false
1.3.4 数组
var beatles=Array(4);
var beatles=Array();
beatles[0]="John"

var beatles=Array("John","...");
var beatles=["John","..."]

var lennon=["John",1940,false];
var beatles=[];
beatles[0]=lennon;

var lennon=Array();
lennon["name"]="John";
1.3.5 对象
var lennon=Object();
lennon.name="John";

var lennon={name:"John",year:1940}
var beatles={};
beatles.vocalist=lennon

1.4 操作

算数操作符

10+'20'=='1020'

即字符串+数值=字符串


条件语句

if(){
  
}else{
  
}

三元操作符
condition ? if true: if false

比较操作符

>=,<=,!=

var a=false
var b=''
//a==b true
//a===b false  全等操作符可比较类型

逻辑操作符

&&||


1.5 循环语句

while(){
  
}

do{
  
}while()for(;;){
  
}

1.6 函数

function name(arguments){
  ...
  [return ...]
}
   
   函数中的变量有var,则是局部变量,否则是全局变量。

1.7 对象

object.property
object.method()


2.实践

2.1 平稳退化

平稳退化:让访问者在不支持js的浏览器上仍顺利浏览网站。

//在绝对必要的情况下可使用弹出窗口予以说明

window.open(url,name,features)
//eg.典型
function popUp(winURL){
  window.open(winURL,"popup","width=320,height=480")
}

/* 
调用popUp的一个方法是使用伪协议。真协议用来在因特网上的计算机之间传递数据报。
伪协议是非标准化协议,eg. 
<a href="javascript:popUp('http://www.example.com/');">example</a>

<a href="#" οnclick="javascript:popUp('http://www.example.com/');return false;">example</a>
'#' 是一个仅供文档内部使用的链接记号,这里是未指向任何目标的内部链接。

<a href="http..." οnclick="popUp(this.href);return false;">example</a>
*/

2.2 分离

渐进渐强:用额外信息层包裹原始数据。

2.3 向后兼容

方案是检测浏览器对JS的支持程度,即对象检测。

function func(){
  if(document.getElementById){
  	statement using document.getElementById
}
}
改进

if(!document.getElementById) return false;
//eg.
window.onload = function() {
  if (!document.getElementsByTagName) return false;
  var lnks = document.getElementsByTagName("a");
  for (var i=0; i<lnks.length; i++) {
    if (lnks[i].getAttribute("class") == "popup") {
      lnks[i].onclick = function() {
        popUp(this.getAttribute("href"));
        return false;
      }
    }
  }
}

2.4 性能

  • 少访问DOM,尽量减少tag
  • 合并脚本减少页面请求,放置<script>在文档末尾,</body>前,可以让页面更快
  • 压缩脚本,有修改代码添加注释的工作副本和放在站点上的精简副本(file.min.js)

压缩工具:

  • Douglas Crockford的JSMin
  • Yahoo的YUI Compressor
  • Google的Closure Compiler

3.DOM

3.1 节点

节点主要有3种:

  • 元素节点element node
  • 文本节点text node
  • 属性节点attribute node

获取节点有3种方法:

  • document.getElementById()
  • document.getElementsByTagName()/ somenode.getElementsByTagName()
  • document.getElementsByClassName()/ somenode.getElementsByClassName()

3.2 属性

object.getAttribute("title")
object.setAttribute("title","what to buy")
//childNodes属性
var body_element=document.getElementsByTagName("body")[0];
body_element.childNodes   //body元素的子元素数组

nodeType:

  • 元素节点----1
  • 属性节点----2
  • 文本节点----3
//nodeValue属性
node.nodeValue本身值是Null
node.nodeValue.childNodes[0]是文本节点

//firstChild与lastChild属性
node.firstChild==node.childNodes[0]
node.lastChild==node.childNodes[node.childNodes.length-1]

6.改进

function addLoadEvent(func){
	var oldonload=window.onload;
	if(typeof window.onload!="function"){
		window.onload=func;
	}else{
		window.onload=function(){
			oldonload();
			func();
		}
	}
}

if(!somenode.nodeName!="IMG") return false

nodeName属性总是返回大写字母。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值