JS入门学习

1 引言

为什么要学习JavaScript?
  • HTML 定义了网页的内容
  • CSS 描述了网页的布局
  • JavaScript 网页的行为

2 JS的使用

2.1 如何编写

  • HTML 中的脚本必须位于 <script> 与 </script> 标签之间。
  • 脚本可被放置在 HTML 页面的 <body> 和 <head> 部分中。
<!DOCTYPE html>
<html>
<body>
.
.
<script>
document.write("<h1>这是一个标题</h1>");
document.write("<p>这是一个段落</p>");
</script>
.
.
</body>
</html>

2.2 输出方式

  • 使用 window.alert() 弹出警告框。
  • 使用 document.write() 方法将内容写到 HTML 文档中。
  • 使用 innerHTML 写入到 HTML 元素。
  • 使用 console.log() 写入到浏览器的控制台。
<script> 
window.alert(5 + 6); 
</script> 
<!DOCTYPE html> 
<html> 
<body> 

<h1>我的第一个 Web 页面</h1> 

<p id="demo">我的第一个段落</p> 

<script> 
document.getElementById("demo").innerHTML = "段落已修改。"; 
</script> 

</body> 
</html>
<script> 
document.write(Date()); 
</script> 

该方法会直接添加一行

<script> 
a = 5; 
b = 6; 
c = a + b; 
console.log(c); 
</script> 

输出到控制台

2.3变量

  • 变量的定义
var pi=3.14; 
var person="John Doe"; 
var answer='Yes I am!'; 

这里不需要对各种变量定义时进行区分。
注意未赋值的的变量值是undefined并不是Null

  • 数组的定义
 var cars=new Array();
 cars[0]="Saab";
 cars[1]="Volvo";
 cars[2]="BMW";
 var cars=new Array("Saab","Volvo","BMW");
var cars=["Saab","Volvo","BMW"];
  • 对象的定义
    对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔:
 var person={firstname:"John", lastname:"Doe", id:5566};

对象属性的调用:

name=person.lastname;
name=person["lastname"];

2.4函数的使用

语法如下:

 function myFunction(var1,var2)
{
代码
 }
<!DOCTYPE html>
<html>
<head>
<script>
function myFunction()
{
alert("Hello World!");
}
</script>
</head>

<body>
<button onclick="myFunction()">Try it</button>
</body>
</html>

2.5 事件

以下是 HTML 事件的实例:

  • HTML 页面完成加载
  • HTML input 字段改变时
  • HTML 按钮被点击
<button onclick='getElementById("demo").innerHTML=Date()'>The time is?</button>
//与前一行代码区别在于使用this调用的是该button
<button onclick="this.innerHTML=Date()">The time is?</button>
<html>
<head> 
<meta charset="utf-8"> 
<title>W3Cschool教程(w3cschool.cn)</title> 
</head>
<body>

<p>点击按钮执行 <em>displayDate()</em> 函数.</p>
<button onclick="displayDate()">点我</button>

<script>
function displayDate()
{
    document.getElementById("demo").innerHTML=Date();
}
</script>
<p id="demo"></p>

</body>
</html>

一些常见的事件如下:

  1. onchange HTML 元素改变
  2. onclick 用户点击 HTML 元素
  3. onmouseover 用户在一个HTML元素上移动鼠标
  4. onmouseout 用户从一个HTML元素上移开鼠标
  5. onkeydown 用户按下键盘按键
  6. onload 浏览器已完成页面的加载

2.6 字符串

  • 可使用单引号或者双引号
var answer = "It's alright";
var answer = "He is called 'Johnny'";
var answer = 'He is called "Johnny"';
//使用转义字符
var answer = ''He is called\"Johnny\" '';
  • 索引
var character = carname[7];
  • 长度
var sln = txt.length;

2.7 类型转换

  • typeof 操作符
    返回变量的类型
typeof "John"                 // 返回 string 
typeof 3.14                   // 返回 number
typeof NaN                    // 返回 number 
typeof false                  // 返回 boolean
typeof [ 1,2,3,4]              // 返回 object
typeof {name: 'John', age:34}  // 返回 object
typeof new Date()             // 返回 object
typeof function () {}         // 返回 function
typeof myCar                  // 返回 undefined (if myCar is not declared) 
typeof null                   // 返回 object
  • constructor 属性
    返回所有 JavaScript 变量的构造函数。
"John".constructor                 // 返回函数 String()  { [native code] }
(3.14).constructor                 // 返回函数 Number()  { [native code] } 
false.constructor                  // 返回函数 Boolean() { [native code] }
[1,2, 3,4].constructor              // 返回函数 Array()   { [native code] }
{name:'John', age:34}.constructor  // 返回函数 Object()  { [native code] }
new Date().constructor             // 返回函数 Date()    { [native code] }
function() {}.constructor         // 返回函数 Function(){ [native code] }

使用该属性同样可以判断变量的类型

function isArray(myArray) { 
    return myArray.constructor.toString().indexOf("Array") > -1; 
}
  • 将数字转换为字符串
String(x)         // 将变量 x 转换为字符串并返回
String(123)       // 将数字 123 转换为字符串并返回
String( 100+ 23)  // 将数字表达式转换为字符串并返回
x.toString() 
(123).toString() 
(100 + 23).toString()

2.8 正则表达式的一些方法的使用

  • search
//用于检索字符串中指定的子字符串,
//或检索与正则表达式相匹配的子字符串,并返回子字符串的起始位置。
var str = "Visit w3cschool"; 
var n = str.search(/w3cschool/i);
var n = str.search("w3cschool");
//output = 6
  • replace
//用于在字符串中用一些字符替换另一
//些字符,或替换一个与正则表达式匹配的子字符串。
var str = "Visit Microsoft!"; 
var res = str.replace(/microsoft/i, "w3cschool");
var res = str.replace("Microsoft", "w3cschool");
// output = "Visit w3cschool!"
  • test()
//用于检测一个字符串是否匹配某个模式,如果字符串
//中含有匹配的文本,则返回 true,否则返回 false。
//以下实例用于搜索字符串中的字符 "e":
<script>
var patt1=new RegExp("e");
document.write(patt1.test("The best things in life are free"));
</script>
//output = true
  • compile()
//方法用于改变 RegExp。
var patt1=new RegExp("e"); 
document.write(patt1.test("The best things in life are free")); 
patt1.compile("d"); 
document.write(patt1.test("The best things in life are free"));
//output = truefalse

2.9 异常处理

  • try catch语法
 try
   {
   //在这里运行代码
   }
 catch(err)
   {
   //在这里处理错误
   }

例子

<!DOCTYPE html>
<html>
<head>
<script>
var txt="";
function message()
{
try
  {
  adddlert("Welcome guest!");
  }
catch(err)
  {
  txt="本页有一个错误。\n\n";
  txt+="错误描述:" + err.message + "\n\n";
  txt+="点击确定继续。\n\n";
  alert(txt);
  }
}
</script>
</head>

<body>
<input type="button" value="查看消息" onclick="message()">
</body>

</html>
  • Throw 语句
    例子
<script>
function myFunction()
{
try
  { 
  var x=document.getElementById("demo").value;
//抛给catch
  if(x=="")    throw "empty";
  if(isNaN(x)) throw "not a number";
  if(x>10)     throw "too high";
  if(x<5)      throw "too low";
  }
catch(err)
  {
  var y=document.getElementById("mess");
  y.innerHTML="Error: " + err + ".";
  }
}
</script>

<h1>My First JavaScript</h1>
<p>Please input a number between 5 and 10:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">Test Input</button>
<p id="mess"></p>

3 函数

  • 将函数存储到变量中,变量即可当做函数使用
<script>
var x = function (a, b) {return a * b};
document.getElementById("demo").innerHTML = x;
</script>
//output = function (a, b) {return a * b}
//匿名函数
var x = function (a, b) {return a * b}; 
var z = x(4, 3);
  • 自调用函数
<script>
(function () {
    document.getElementById("demo").innerHTML = "Hello! 我是自己调用的";
})();
</script>
  • 函数是对象
    在 JavaScript 中使用 typeof 操作符判断函数类型将返回 "function" 。
<script>
function myFunction(a, b) {
    return arguments.length;
}
document.getElementById("demo").innerHTML = myFunction(4, 3);
</script>
//output = 2
  • 函数显式参数与隐藏参数(arguments)
//parameter1,parameter2, parameter3为显式参数
functionName(parameter1, parameter2, parameter3) {
    code to be executed
}
//1, 123, 500, 115, 44, 88作为隐式参数传递
//JavaScript 函数有个内置的对象 arguments 对象.
x = findMax(1, 123, 500, 115, 44, 88);

function findMax() {
    var i, max = arguments[0];

    if(arguments.length < 2)return max;

    for (i = 0; i < arguments.length; i++) {
        if (arguments[i] > max) {
            max = arguments[i];
        }
    }
    return max;
}
  • 函数调用的四种方式
  1. 作为函数被调用
function myFunction(a, b) {
    return a * b;
}
myFunction(10, 2);           // myFunction(10, 2) 返回 20
window.myFunction(10, 2);  //同上行
  1. 作为对象的方法被调用
var myObject = {
    firstName:"John",
    lastName: "Doe",
    fullName: function () {
        return this.firstName + " " + this.lastName;
    }
}
myObject.fullName();         // 返回 "John Doe"
  1. 使用构造函数调用函数
<script>
function myFunction(arg1, arg2) {
    this.firstName = arg1;
    this.lastName  = arg2;
}
var x = new myFunction("John","Doe")
document.getElementById("demo").innerHTML = x.firstName; 
</script>
  1. 作为函数方法调用函数
function myFunction(a, b) {
    return a * b;
}
myFunction.call(myObject, 10, 2);      // 返回 20
function myFunction(a, b) {
    return a * b;
}
myArray = [10,2];
myFunction.apply(myObject, myArray);   // 返回 20
  • 闭包
<script>
var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();
function myFunction(){
    document.getElementById("demo").innerHTML = add();
}
</script>

这里需要注意的是,add变量代表的是一个方法function () {return counter += 1;}

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

推荐阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,072评论 0 3
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 3,828评论 0 0
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,406评论 1 45
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,082评论 1 32
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,096评论 0 21