为什么使用Javascript
由于HTML是一种简单的文本标记语言,它不能响应用户、做出决策或者自动执行重复性任务。像这样的交互式任务需要更先进的语言:程序设计语言或者脚本编程(javascript)语言。javascript做的很多事情都涉及与用户交互,这意味着相应事件(event)。
Javascript能力
表单验证
表单验证是JavaScript的另一种常见的应用,尽管HTML5的表单验证特性也在这里抢了JavaScript 的许多风头。一个简单的脚本就可以读取用户输入到表单中的值,并且确保它们具有正确的格式,如邮政编码、电话号码和电子邮件地址。这类客户端验证使用户能够修正常见的错误,而无需等待来自Web服务器的响应,以告诉他们表单提交是无效的。
特殊效果
最容易、最讨厌的JavaScript应用之一是创建吸引注意力的特殊效果——例如,在浏览器的状态栏中滚动消息,或者使页面的背景色闪光。
这些技术幸运地不落俗套,但是由于W3CDOM和最新的浏览器的出现,利用JavaScript创建一些更令人印象深刻的效果是可能的一—例如,在页面上创建可以拖放的对象,或者在幻灯片放映中创建图像之间的渐隐过渡效果。一些开发人员结合使用HTML5、CSS3和JavaScript,创建了全功能的交互式游戏。
远程脚本调用(AJAX)
长时间以来,lav6S。mm的最大根制是无法使之与Wb服务器通信。例如,可以使用它来验证电话号码具有正确的位数,但是不能基于电话号码在数据库中查找用户的位置。然而现在,你的脚本无须加载页面即可从服务器获取数据,或者把数据发回给服务器以进行保存。这些特性统称为AJAX(Asynchronous JavaScript And XML,异步JavaScript和XML)或者远程脚本调用(remote scripting)。如果你使用过Google的Gmail 邮件应用程序、Facebook,或者允许你评论故事、给最喜爱的选项投票或参与民意调查的任何在线新闻站点,那么你已经见过了AJAX的实际应用。它们都使用远程脚本调用展示一个可以响应的用户界面,该界面与后台的服务器协同工作。
首先运行那个脚本
在,WMeb文档内,实际上可以具有多个脚本:在单个文档内可以使用一组或多组<script>标签、外部javascript文件以及许许多多的事件处理程序。对于所有这些脚本,你可能感到迷惑的是浏览器怎样知道首先执行哪个脚本。好在这是以一种逻辑方式实现的。
- HTML文档的<head>区域内的<script>标签组将首先被处理,而无论它们是包括嵌入式代码还是引用JavaScript文件。由于<head>区域内的这些脚本不能在Web 页面中产生输出,因此,最好在这里定义要使用的函数。
- HTML文档的<body>区域内的<script>标签组将在<head>区域内的那些<script>标签组之后执行,同时加载并显示Web页面。如果页面主体中有两个或更多的脚本,它们将按顺序执行。
- 当事件处理程序的事件发生时,就执行相应的事件处理程序。例如,当Web页面的主体加载时,将执行onload事件处理程序。由于<head>区域是在任何事件之前加载的,因此可以在那里定义函数,并在程序中使用他们。
JSON
尽管JSON(javascript object notation,javascript对象表示)不是核心javascript语言的一部分,但事实上它是一种构造和存储信息的常见方式,这些信息是由客户端上的基于javascript的功能使用或创建的。JSON编码的数据被表示为参数/值 对的序列,其中每一对都使用冒号把参数与值分隔开,这些“参数”:“值”对本身通过逗号分隔开,最后整个序列包围在大括号之间。
{"firstName": "Brett", "lastName": "McLaughlin"}
当今,JSON的最常见的应用之一是:作为由API以及其他数据馈送使用的一种数据交换格式,这些数据馈送是由前端应用程序使用的,它使用JavaScript解析这种数据。这使得人们越来越多地使用JSON代替其他数据格式(如XML),因为JSON具有以下优点。
- 很容易被人和计算机读取。
- 概念简单,JSON对象只是由大括号封闭的一系列”参数”:“值”对。
- 基本上是自文档化的。
- 可以快速创建和解析。
- 无需特殊的解释器或者其他额外的程序包。
JavaScript在Web应用中的作用
JavaScript语法风格
JavaScript引入方式
1.页面中:<script type=“text/javascript”></script>
2.引入js文件:<script src=“xx.js”type=“text/javascript”></script>
注意:src引入的时候,js可以是网络资源
JavaScript命名规范
定义变量时可以不适用var,为了方便记忆还是使用吧
命名范围 : 数字,⼤大⼩小写字⺟母,下划线 _ ,美元符号 $(不不能以数字开头)
全大写为常量
var PI=3.1415926535; var BAIDU=“https://www.baidu.com”;
JavaScript全部数据类型
字符串String
var str = “hello world!”; str[0] -> “h” 以数组的⽅方式访问⼀一个字符 str.indexOf(“h”) -> 0 在字符串串中查找某字符 str.replace(“hello”,”hi”) -> “hi world!” 替换字符串串的某⼀一段 str.length -> 12 字符串串的⻓长度
在js中,单引号和双引号是可以互换的,但是要注意嵌套关系!
var test = “he say :’my name is jack’.”;//正确 var test = “he say :”my name is jack”.”;//错误
数字
取出字符串串的数字 ① 取整数 parseInt(“1.23abc”) -> 1 ② 取分数 parseFloat(“1.23abc”) -> 1.23
对象
javascript⾥里里最重要的类型,⼀一种数据的封装⽅方式
对象的语法格式
var myComputer = { name : “我的电脑”, brand : “dell”, price : 4888 }; 1. 对象的内容使⽤用花括号 { } 包围 2. 内容为键值对的形式 3. 键(key)不不需要括号,遵循js变量量命名规范 4. 值(value)可以为任何类型 5. 键值对之间以逗号隔开,最后⼀一个不不需要
对象的访问语法
var myComputer = { name : “我的电脑”, brand : “dell”, price : 4888 };
点语法 myComputer.price -> 4888 ⽅方括号语法 myComputer[“price”] -> 4888
对象的分类:
1.内建对象
由ES标准中定义的对象,在任何的ES的实现中都可以使用
比如:Math String Number Boolean Function Object....
2.宿主对象
由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象
比如BOMDOM
3.自定义对象
由开发人员自己创建的对象
函数
在JS中两种函数定义⽅方式,两种使⽤用并没有太⼤大的区别,但是由于⼀一些原因,⼀一般使⽤用后者
定义了了⼀一个名字为add的函数 function add (){} 定义了了⼀一个没有名字的函数,然后使⽤用add这个变量量名来指向他 var add = function(){}
函数作为构造器器:⽤用于产⽣生对象
定义构造器器: var Computer = function(price,brand){ this.price = price; this.brand = brand; this.start = function(){ console.log(“开机”) } } 调⽤用构造器器: var com_1 = new Computer(1000,”apple”); { price : 1000, brand : “apple” start : function(){/*…*/} }
js中一般习惯将构造器首字母大写。构造器的主要作用是用于产生一个对象,所以不需要return
new是构造器专属关键字,⽤用于使构造器器产⽣生⼀一个对象
函数和构造器器混⽤用的情况
var Computer = function(name,price){ this.name = name ; return “运⾏行行结束”; this.price = price; } 使⽤用函数调⽤用 Computer(“dell”,3000); • 结果:返回”运⾏行行结束” • name属性去到了了全局上 • this这时候代表的是window • 不不会运⾏行行到price那⼀行 使⽤用构造器器调⽤用 var a = new Computer(“dell”,3000); • 结果:返回对象,不不运⾏行行return • 对象a带有属性name,不不带有price • 不不会运⾏行行到price那⼀行
null、undefined 和 NaN
null
就是什什么都没有
typeof null -> “object”
不不是说好什什么都没有吗?你怎么是个对象呢??
undefined
未定义
var test ; test = undefined; typeof undefined -> “undefined”
我以为你和null⼀一样假装什什么都没有其实是object,结果你⽜牛逼到⾃自⼰己就是⼀一个类型了了?
NaN
Not a Number 非数字
parseInt(“asd”) -> NaN typeof NaN -> “number”
你不不是说你不不是数字吗?你丫怎么是数字类型呢?NaN是数字类型⼀一个特殊的值