JavaScript基础

1.1第一个 JavaScript 程序

#这段代码的效果是,弹出一个小框,显示“hello world!”
<html>
  <head></head>
    <body>
      <script>
        alert("hello world!");
      </script>
    </body>
</html>

2.变量的声明

在 JavaScript 中,变量用 Var 命令做声明:

var test ;    // 声明了一个名为 test 的变量。
var test_2 = "shiyanlou" ;  // 声明一个名为 test_2 的变量,并赋值为“shiyanlou”。

在 JavaScript 中,变量也可以不作声明,而在使用时再根据数据的类型来确其变量的类型,如:

x = 100 ;     // 变量 x 为整数
y = "hello" ; // 变量 y 为字符串
z = True ;    // 变量 z 为布尔型
cars=["Audi","BMW","Volvo"]; // cars 是一个数组

3.Javascript语句

  • if/else
  • switch/case
  • for
  • while
  • break/continue

4.JavaScript函数

function 函数名 (参数1,参数2)
{
  函数体;

  return 返回值;
}

5.事件

<html>
<head>
  <script>
    function click_button() {     // 事件处理程序,弹出提示窗
      alert('welcome to shiyanlou');
    }
  </script>
</head>

<body align="center">
  <br></br>
  <button onclick="click_button()">click me</button>  <!--发生事件 onclick 的时候,执行 click_button()-->
</body>
</html>

常用事件

name function
onclick 单击
ondblclick 双击
onfocus 元素获得焦点
onblur 元素失去焦点
onmouseover 鼠标移到某元素之上
onmouseout 鼠标从某元素移开
onmousedown 鼠标按钮被按下
onmouseup 鼠标按键被松开
onkeydown 某个键盘按键被按下
onkeyup 某个键盘按键被松开
onkeypress 某个键盘按键被按下并松开

其中,onmouseover 和 onmouseout 事件可用于在鼠标移至 HTML 元素上和移出元素时触发函数。比如这一例子:

<html>
<head></head>
    <body>
        <div style="background-color:green;width:200px;height:50px;margin:20px;padding-top:10px;color:#ffffff;font-weight:bold;font-size:18px;text-align:center;"
          onmouseover="this.innerHTML='good'"
          onmouseout="this.innerHTML='you have moved out'"
        >move your mouse to here</div>
    </body>
</html>

onmousedown, onmouseup 是鼠标 压下 和 松开 的事件。首先当点击鼠标按钮时,会触发 onmousedown 事件,当释放鼠标按钮时,会触发 onmouseup 事件。
举例说明:

<html>
<head>
  <script>
    function mDown(obj)    // 按下鼠标 的 事件处理程序
    {
    obj.style.backgroundColor="#1ec5e5";
    obj.innerHTML="release your mouse"
    }
    function mUp(obj)     // 松开鼠标 的 事件处理程序
    {
    obj.style.backgroundColor="green";
    obj.innerHTML="press here"
    }
  </script>
</head>
<body>
<div style="background-color:green;width:200px;height:35px;margin:20px;padding-top:20px;color:rgb(255,255,255);font-weight:bold;font-size:18px;text-align:center;"

onmousedown="mDown(this)"
onmouseup="mUp(this)"
>press here</div>
</body>

</html>

6.对象

6.1创建对象

student = new Object();  // 创建对象“student”

student.name = "Tom";   // 对象属性 名字
student.age  = "19";    // 对象属性 年龄

student.study =function() {   // 对象方法 学习
    alert("studying");
};

student.eat =function() {     // 对象方法 吃
    alert("eating");
};

以上方法在创建多个对象时,会产生大量重复代码,所以我们也可以采用函数的方式新建对象:

function student(name,age) {
    this.name = name;
    this.age = age;
    this.study = function() {
        alert("studying");
    };
    this.eat = function() {
        alert("eating");
    }
}

然后通过 new 创建 student 对象的实例:

var student1 = new student('Tom','19');
var student2 = new student('Jack','20');

6.2访问对象的属性与方法

新建的 student1 对象,可以这样使用:

<script>
var x = student1.name;  // 访问对象的属性
var y = student1.age;

document.write(x);
document.write(y);

student1.study();     // 调用对象的方法
</script>

当我们需要 反复访问 某对象的时候,可以使用 with 语句简化操作,而不需要反复地用“.”符号,比如:

with(student1) {
var x = name;
var y= age;
study();
eat();
}

7.内置对象

1.String

属性:string.length

方法 功能
charAt(n) 返回该字符串第 n 位的单个字符。(从 0 开始计数)
charCodeAt(n) 返回该字符串第 n 位的单个字符的 ASCII 码。
indexOf() 用法:string_1.indexOf(string_2,n); 从字符串 string_1 的第 n 位开始搜索,查找 string_2,返回查找到的位置,如果未找到,则返回 -1,其中 n 可以不填,默认从第 0 位开始查找。
lastIndexOf() 跟 indexOf() 相似,不过是从后边开始找。
split('分隔符') 将字符串按照指定的分隔符分离开,返回一个数组,例如:'1&2&345&678'.split('&');返回数组:1,2,345,678。
substring(n,m) 返回原字符串从 n 位置到 m 位置的子串。
substr(n,x) 返回原字符串从 n 位置开始,长度为 x 的子串。
toLowerCase() 返回把原字符串所有大写字母都变成小写的字符串。
toUpperCase() 返回把原字符串所有小写字母都变成大写的字符串。

2.Math

属性 作用
E 返回常数 e (2.718281828...)。
LN2 返回 2 的自然对数 (ln 2)。
LN10 返回 10 的自然对数 (ln 10)。
LOG2E 返回以 2 为低的 e 的对数 (log2e)。
LOG10E 返回以 10 为低的 e 的对数 (log10e)。
PI 返回π(3.1415926535...)。
SQRT1_2 返回 1/2 的平方根。
SQRT2 返回 2 的平方根。
方法 作用
abs(x) 返回 x 的绝对值。
round(x) 返回 x 四舍五入后的值。
sqrt(x) 返回 x 的平方根。
ceil(x) 返回大于等于 x 的最小整数。
floor(x) 返回小于等于 x 的最大整数。
sin(x) 返回 x 的正弦。
cos(x) 返回 x 的余弦。
tan(x) 返回 x 的正切。
acos(x) 返回 x 的反余弦值(余弦值等于 x 的角度),用弧度表示。
asin(x) 返回 x 的反正弦值。
atan(x) 返回 x 的反正切值。
exp(x) 返回 e 的 x 次幂 (e^x)。
pow(n, m) 返回 n 的 m 次幂 (nm)。
log(x) 返回 x 的自然对数 (ln x)。
max(a, b) 返回 a, b 中较大的数。
min(a, b) 返回 a, b 中较小的数。
random() 返回大于 0 小于 1 的一个随机数。

3.Array数组对象

注意:JavaScript只有一维数组,要使用多维数组,请用这种虚拟法:
var myArray = new Array(new Array(), new Array(), new Array(), ...);
调用这个“二维数组”的元素时:
myArray[2][3] = ...;

属性:length
返回数组的长度,即数组里有多少个元素。它等于数组里最后一个元素的下标加一。

想添加一个元素,只需要:
myArray[myArray.length] = ...;

(2)Array 的方法

  • join("指定分隔符") :返回一个字符串,把数组元素串起来,元素间用指定分隔符隔开。

  • toString() :把数组转为字符串,并返回结果。

  • reverse() :使数组元素倒序。

  • slice(n,m) :返回子数组,从数组第 n 个元素到第 m 个元素。

  • sort(SortFunction) :按照指定的 SortFunction 将数组的元素排序。

  • concat(Array_1,Array_2) :用于连接两个或多个数组。

8.DOM

DOM 是 文档对象模型(Document Object Model)的简称,它的基本思想是把结构化文档(比如 HTML 和 XML)解析成一系列的节点,再由这些节点组成一个树状结构(DOM Tree)。所有的节点和最终的树状结构,都有规范的对外接口,以达到使用编程语言操作文档的目的,所以,DOM 可以理解成文档(HTML 文档、XML 文档)的编程接口。

  • 选取文档元素
    (1)通过ID选取
    我们可以使用方法 getElementById() 通过元素的 ID 而选取元素,并对其做操作,比如:
<html>
<body>
<div id="my_div"></div>

<script>
    document.getElementById("my_div").style.height="100px";  // 设置 my_div 高度为 100px
    document.getElementById("my_div").style.background="red"; // 设置 my_div 颜色为 红色
</script>

</body>
</html>

(2)通过名字(Name)或标签名(TagName)选取

<html>
<body>
<input type="text" />
<input type="text" />

<script>
document.getElementsByTagName("input")[0].value="hello";   // 下标为 [0] 表示选取第 1 个 input 标签
document.getElementsByTagName("input")[1].value="shiyanlou"; // 下标为 [1] 表示选取第 2 个 input 标签
</script>

</body>
</html>

9.节点、属性操作和文档遍历

  • 查询和设置元素属性
    可以通过 getAttribute() 和 setAttribute() 查询和设置元素的属性:
<html>
<head>
<style>
.class_1 {
    height:100px;
    width:100px;
    background:red;
}
.class_2 {
    height:100px;
    width:100px;
    background:blue;
}
</style>
</head>

<body>
<div id="div_1" class="class_1"></div>
<br/>
<a>before:</a>

<script>
document.write(document.getElementById("div_1").getAttribute("class")); // 查询 div_1 的属性
</script>

<br/>
<a>after:</a>

<script>
document.getElementById("div_1").setAttribute("class","class_2");  // 修改 div_1 的属性为 class_2
document.write(document.getElementById("div_1").getAttribute("class")); // 再次查询 div_1 的属性
</script>

</body>
</html>
  • 父节点
    通过 parentNode() 方法可以查看并操作一个节点的父节点,示例:找到 id 为 demo 的元素的父节点,并输出其 class 的名称:
<html>
<body>
<div class="demo-parent">
    <div id="demo">        
    </div>
</div>

<script>
    document.write(document.getElementById("demo").parentNode.getAttribute("class"));
</script>
</body>
</html>
  • 创建和插入节点
    JavaScript 可以动态地在页面中创建并插入节点,这便需要用到 createElement()、appendChild() 方法,它们的作用分别是创建节点和插入节点。

比如:创建一个 div 并为其设置高度(100px)和背景色(red),并追加到 body 后面:

<html>
<body>
<div style="background:#00F; height:100px"></div>
<script>
    var mydiv = document.createElement("div");
    mydiv.style.height = "100px";
    mydiv.style.background = "red";
    document.getElementsByTagName("body")[0].appendChild(mydiv);
</script>
</body>
</html>
  • 删除节点
    除了创建,我们还可以删除一个节点,通过 removeChild() 方法:
<html>
<head>
</head>
<body>
<div>
    <div id="div_red" style="background:#F00; height:100px"></div>
    <div id="div_blue" style="background:#00F; height:100px"></div>
</div>
<script>
function remove_red(){
    var obj = document.getElementById("div_red");
    obj.parentNode.removeChild(obj);
    }
</script>
<button onclick="remove_red()">remove red div</button>
</body>
</html>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容