核心Javascript学习
1. 引言:
1.1. 网页三要素:
l HTML(内容)
l CSS(外观)
l Javascript(行为)
1.2. OOP的相关概念
1). 对象,方法和属性
l 对象就是指"事物"在程序设计语言中的表现形式
l 对象往往是用名词表示
l 方法往往是动词
l 属性往往是形容词
(The black cat sleeps on my head)
clas Cat{
private String color;
public void sleep(Object location) {}
}
2). 类
l 类是对象的模板,对象是类的一个实例
l javascript没有类, 它是通过构造器函数和原型(prototype)来实现类似类的概念
Class c = Class.forName(“com.atguigu.Person”);
method = c.getMethod(methodname, Class… params );
c.getField(name);
c.getConstructor(Class… params);
3). 封装
l 相关的数据(用属性存储)
l 基于这些数据所能做的事(用方法存储)
4). 聚合
l 指将几个现有的对象合并为一个新的对象的过程
5). 重用与继承
l javascript中没有类, 继承只能发生在对象之间
6). 多态
l 父类引用指向子类对象
l 通过父引用调用方法时调用的是子类重写的方法
2. javascript介绍
2.1. javascript的发展历史
LiveScript(网景Netscape)-->JavaScript(推广)
--->JScript(微软)
2.2. javascript是什么?
l 总述: JavaScript一门解释型(不是编译型)脚本语言,它的主要特点有:面向对象,弱类型,动态,基于原型(对象)(不基于类)
1). 解释型(不是编译型)
l 代码编写好后, 不需要编译, 直接由js的解析引擎来解析执行(动态性更好,但开销较大)
2). 弱类型
l 在声明变量时,不用指定其数据类型, 而且它可以被随时赋值为任意类型的数据,解释器会根据上下文自动对其造型
var a = 1; //alert(typeof a=="number"); //"number" a = "tt"; //alert(typeof a); //string a = [1, "tt", null]; //alert(typeof a);//object a = function(){ alert("----"); }; //alert(typeof a);//function |
3). 面向对象
l 在JavaScript中“一切皆对象”,在这一方面,它比其他的OO语言来的更为彻底,即使作为代码本身载体的function,也是对象,数据与代码的界限在JavaScript中已经相当模糊
var b = { name: "Tom", age: 12, getName: function(){return this.name} }; //json Javascript Object Notation //alert(b.name); //Tom //alert(b.getName);//指向函数对象 //alert(b.getName()); //调用指向的函数对象 |
4). 动态
l 对象的属性可以在对象创建了之后, 动态的设置, 且属性值可以是任意类型的数据(自然可以是一个函数)
b.test = function() { return function() { alert("---"); }; }; b.test(); //b.test()(); |
5). 基于原型(对象)(不基于类)
l 在js中没有真正类的概念, 如何实现代码的复用呢?, 那就是prototype
function Person(name, age) { this.name = name; this.age = age; } var p = new Person("tom", 12); Person.prototype.getAge = function() { return this.age; }; //alert(p.getAge()); |
1.2. javascript程序执行的宿主环境
l web浏览器(js解析引擎)
l 服务器端 Node.js
l 桌面
l 富媒体
2.2. javascript的分类
1). 按所处的位置分:
l 客户端js
l 服务器端js
2). 按模块分:
l 核心JavaScript(ECMAScript)
l BOM(Browser Object Model) window
l DOM(Document Object Model)
l 其它扩展: node.js
3. 基本概念
3.1. 变量
1). 理解: 变量是一块用来存储可变数据的内存的标识
2). 定义: 通过var来定义
var i = 1; alert(i); i = "abc"; alert(i); |
3.2. 数据类型
1). 数据的类型分类:
a. 基本类型: 数值(number),字符串(string),布尔值(boolean),undefined
b. 对象类型: 对象(object),数组(array),函数(function)
2). 变量的类型:
a. 基本类型: 保存基本类型数据的变量
b. 引用类型: 保存对象类型数据的地址值的变量
3). 详解:基本类型数据
a. 数值类型(number)
整数与小数
Infinity
NaN
b. 字符串类型(string)
定义: 一对单引号或双引号包的数据
c. 布尔值类型(boolean)
只有true和false两种值
d. undefined类型(不同于"undefined")
它的值’undefined’,如果变量未赋值, 即其值为undefined
var str = "Hello, world";//字符串 var i = 10;//整型数 var f = 2.3;//浮点数 var b = true;//布尔值 var u; //undefined(没有初始化或没有定义) //alert(typeof str); //alert(typeof i); //alert(typeof f); //alert(typeof b); //alert(typeof u); |
4). 简介:对象类型数据
a. 对象(object): 属性的集合,即键值的散列表
b. 数组(array): 有序的列表
c. 函数(function): 包含可执行的代码的对象数据
var str = "Hello, world"; var obj = new Object(); //var obj = {}; obj.str = str; obj.num = 2.3; array = [ "foo", "bar", "zoo" ]; function func() { alert("I am a function here"); } //alert(typeof obj); //object //alert(typeof array); //object //alert(array instanceof Array); //alert(typeof func); //function //注意: null为一个对象类型数据 var n = null; //alert(typeof n); |
5). 数据类型之间的转换:
a. 基本类型的字符串--->对象类型的字符串
b. 数值类型的对象字符串--->number
c. 任意类型--->boolean型
1. 能自动转为false的数据:空字符串, null, undefined, 0, NaN
2. 其它所有的都为true
var str = "Java"; //alert(typeof str); //string 基本类型 //alert(str.length);//4 自动转换为String对象类型 str = "123"; str = str / 1; //alert(typeof str);//number 自动转换为基本类型数值 str = "123"; str = str + 1; //是一个连接符 //alert(str); //"1231" str = str * 1;//1231 str = str + 1;//1232 是一个算术运算符 //alert(str); str = null; if (!str) { //alert("----1"); } str = "a"; if (str) { //alert("----2"); } str = 0; if (!str) { //alert("----3"); } |
3.3. 操作符(特别的)
1). 小括号: ()用来调用一个函数
2). 中括号运算符: [ ]用来创建一个数组/获取数组元素
3). 大括号运算符: { }用来创建一个对象
4). 冒号运算符: 冒号用来分隔对象的属性名和属性值
5). typeof: 用来得到变量的数据类型所对应的字符串
6). instanceof: 判断一个对象是否是指定的类型
7). delete: 删除指定的数据
function fun3() { //alert("----"); } fun3(); var arr3 = [ 1, "abc", [ 1, 2 ] ]; //alert(arr3[2][1]); var obj3 = { name : "Tom", "my age" : 12 }; //alert(obj3.name); //alert(typeof obj=="object") //alert(typeof arr3=="object") //alert(arr3 instanceof Array); delete arr3[0]; //alert(arr3[0]); delete obj3.name; //alert(obj3.name); |
3.4. 条件与循环
l if / switch / while,do-while,for,for-in
var obj3 = { name : "tom", age : 12, getAge : function() { return this.age; } }; for ( var v in obj3) { if (obj3[v] == "function") { //alert(obj3[v]()); } else { //alert(obj3[v]); } } |
4. 函数
4.1. 定义函数(2+1种方式)
1). function
function sum(n, m) { return n + m; } |
2). var + function
var sum2 = function(n, m) { return n + m; }; |
3). new + Function
var sum3 = new Function("n", 'm', "return n+m;"); //自己不要这么写, 但它是定义函数的最终方式 |
4.2. 调用函数(传参问题)
l arguments: 在每个函数中都有一个内置的此引用变量,它指向代表调用时传的所有参数组成的数组
//alert(sum(2, 3)); //alert(sum2(2, 4)); //alert(sum3(2, 5)); //alert(sum(2)); //NaN //利用函数的内建arguments数组对象来接收动态参数 var sum4 = function() { var result = 0; for (var i = 0; i < arguments.length; i++) { result += arguments[i]; } return result; } //alert(sum4(3, 2,6)); |
4.3. 系统预定义函数
1). parseInt() / parseFloat() : 将一个字符串转为数字
2). isNaN() : 判断是否不是一个数值
3). encodeURI() / decodeURI(): 对字符串进行编码与解码
4). eval() : 将Js代码格式的字符串当作js执行
//1). parseInt() parseFloat() //alert(parseInt('12.3')); //alert(parseInt('ab')); //NaN //2). isNaN() 不是一个数值返回true //alert(isNaN('ba')); //true //alert(isNaN('12')); //false //3). encodeURI() decodeURI() //alert(encodeURI('好')); //alert(decodeURI(encodeURI('好'))); //4). eval() 将传入的字符串当Js代码运行 //eval('alert("tttt");'); |
4.4. 变量的作用域
1). 变量的分类(按定义的位置分)
全局变量: 在函数外面定义的变量
局部变量: 在函数中用var定义的变量(包括形参)
静态变量
非静变量
2). 变量的作用域
全局变量: 在整个全局范围内都有效
局部变量: 在所在的函数范围内有效(不同于java)
//代码一: var global = 1; function f(arg){ var local = 2; arg++; global--; return arg; } f(global); //alert(window.local); //undifined //alert(global); //0 //代码二 var i = 1; function f2() { //alert(i); var i = 2;//局部变量的作用域是定义它的整个函数 } f2(); //undifined |
4.5. 函数也是对象
1). 函数是一种对象数据
只是它的内容为一段可执行的代码, 如何证明一个数据是不是对象呢?
var a = function() { return 2; }; var b = a; a.name = "tom"; //alert(b.name); |
2). 匿名函数
function(){ alert("-----"); } |
3). 自调用函数
(function(w){ w.$ = function(){ //alert("+++++"); }; })(window); //$(); |
4). 回调用函数
function $$(f) { if (typeof f == 'function') { f(); } else { alert('not a function'); } } //$$(function(){alert("----");}); //$$('tt'); |
5). 返回函数的函数
function aa() { //alert('aa'); return function() { //alert('bb'); }; } //alert(typeof aa()); aa()(); |
6). 内部私有函数
function t() { function tt(){ //alert("---"); } tt(); } t(); //tt();//不可见, 不可调用 |
4.6. 作用域链(扩展)
- 回顾变量的作用域: 在所在的函数的整个范围内
- 函数的作用域: 每个函数在定义(非执行)时, 解析引擎都会为其创建一个只属于它的环境(即作用域)
function f6() { var i = 1; f62(); } function f62(){ alert(i); } f6(); |
5. 数组
5.1. 创建数组(2种方式)
1). [ ]
var arra = [ 1, "t", { t : "aa" }, function() { alert("----"); } ]; |
2). new Array()
arra = new Array(1, "t", { t : "aa" }, function() { alert("----"); }); |
5.2. 访问数组中的元素
l 通过下标index去访问
//alert(arra[1]); //arra[3](); |
5.3. 数组的类型
- typeof
- instanceof
//1). typeof //alert(typeof arra); //object //2). instanceof //alert(arra instanceof Array); |
5.4. 添加和更新数组元素
arra[0] = 2; //alert(arra[0]); arra[5] = "kk"; //alert(arra[5]); //alert(arra[4]); //undefined |
5.5. 删除数组元素
delete arra[0]; //alert(arra[0]); //undefined |
5.6. 扩展:
js中数组元素也可不以index存取, 而以字符串key存取
arra['tt'] = "abc"; alert(arra['tt']); |
6. 对象
6.1. 创建对象
1). 使用{}(比较数组)
var obj = { name : "abruzzi", age : 26, birthday : new Date(1984, 4, 5), addr : { street : "Huang Quan Road", xno : "135", //属性 getStreet : function(){return this.street} //方法 } }; //alert(obj.addr.street); //alert(obj.addr.getStreet()); |
2). new构造函数创建
a. 系统的
obj = new Object(); obj.name = "xfzhang"; obj.age = 21; obj.getAge = function(){return this.age}; //alert(obj.getAge()); |
b. 自定义的
function Person(name, age) { this.name = name; this.age = age; this.getAge = function(){return this.age}; } var p = new Person("Kity", 23); p.setAge = function(age){this.age = age}; //给对象动态的添加了一个方法 p.setAge(13); //alert(p.getAge()); |
6.2. 相关概念的理解
1). 对象:
JavaScript对象其实就是属性的集合,具有确定性,无序性和互异性
obj = { tt : "abc", tt : function() { alert("---"); }//将前面的tt属性给覆盖了 }; //alert(obj.tt); |
2). 对象的属性:
可以动态的添加和删除, 且其值可以指向任意类型的数据
obj.test = "bb" //alert(obj.test); obj.test = 2; //alert(obj.test); delete obj.test; //alert(obj.test); |
3). 对象的方法:
当对象的属性指向的是一个函数时, 一般会称之为方法
obj.test = function() { //alert("-----"); }; obj.test(); obj.test = function() { //alert("++++"); }; obj.test(); |
4). 全局对象:
js执行的宿主环境一般会提供一个全局对象(浏览器端window)
//alert(window); //alert(window==this); //alert(window instanceof Window); |
5). 全局变量/全局函数:
全局对象的属性(在函数外面定义的变量)
//Person("BB", 12); //alert(window.name); alert(name); |
6.3. 对象的constructor属性
1). constructor是一个指向用来创建当前对象的构造函数的引用
2). 它指向创建对象的构造方法
//alert(p.constructor); //alert(window.age); //alert(p.constructor("mm", 12)); //alert(window.age); Person("BB", 12); //alert(window.age); |
6.4. 内建对象(构造器函数)
1). 数据封装类对象
1.1). Object : 所有对象(构造器)的父级对象
l toString()
var o = new Object(); o = {}; //alert(o==o.toString()); o.toString = function() { return "my object" }; //alert(o); |
1.2). Array:数组
l sort()
l reverse()
l push()
l pop()
var arr = new Array(620, '61b', '62a'); //alert(arr.reverse()); //alert(arr.sort()); //alert(arr); //arr.push(9); //alert(arr); //arr.pop(); //alert(arr); |
1.3). Function: 函数
1.3.1). prototype属性
1. 它指向一个对象
2. 它只有在该函数被用作构造器时才会发挥作用
3. new出每个对象都自动拥有propotype的引用(__proto__), 并可以将其当做自身的属性来使用
var p2 = new Person("JAck", 13); Person.prototype.height = 13; alert(p2.height); Person.prototype = "ttt"; |
var some_obj = { name : 'TT' }; function F() { }; //alert(F.prototype); //alert(new F().name); F.prototype = some_obj; //alert(new F().name); |
function Person(name, age) { this.name = name; this.age = age; } var p1 = new Person("Tom",12); Person.prototype.height = 12; //alert(p1.height); var p2 = new Person("Jack", 13); //alert(p2.height); //alert(p2.__proto__.height); //alert(p2.__proto__==Person.prototype); Person.prototype = {weight:120}; //alert(p2.height); var p3 = new Person("dd", 23); //alert(p3.weight); |
1.3.2). length属性: 得到定义的参数个数
//alert(f.length); //区别于arguments |
1.3.3). apply(obj, array)方法:
将当前函数应用到指定的对象上去执行, 如果没有指定对象则为window
function Product(name, price) { this.name = name; this.price = price; } function Toy(name, price) { Product.apply(this, arguments); this.category = 'toy'; } Toy.prototype = new Product(); var f = new Toy("Tom", 12); //alert(f); |
1.3.4). call(obj, args)方法:
function Food(name, price) { Product.call(this, name, price); //this.Product(name, price) //this.name = name; ///this.price = price; this.category = "food"; } Food.prototype = new Product(); var f = new Food("cat", 12); //alert(f.toString()); |
1.4). String: 包装字符串的对象
l toUpperCase()
l toLowerCase()
l charAt()
l indexof()
1.5). Number: 包装数值的对象
1.6). Boolean: 包装boolea值的对象
2). 工具类对象
2.1). Math: 包含一些数据计算的static方法
//alert(Math.random()); //alert(Math.min(1, 2)); |
2.2). Date: 日期时间对象
//alert(new Date()); |
2.3). RegExp: 正则表达式对象
l 正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串
var reg=new RegExp("^\\d{6,8}$"); reg = /^\d{6,8}$/; //alert(reg.test("123123222")); //alert(reg.test("12312a")); |
3). 错误类对象
3.1). Error
7. BOM与DOM
7.1. 什么是BOM?
l BOM是browser object model的缩写,简称浏览器对象模型
l BOM提供了独立于内容而与浏览器窗口进行交互的对象
l 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是window
l BOM由一系列相关的对象构成,并且每个对象都提供了很多方法与属性
l BOM缺乏标准,JavaScript语法的标准化组织是ECMA,DOM的标准化组织是W3C
l BOM最初是Netscape浏览器标准的一部分
7.2. 什么是DOM?
DOM= Document Object Model,文档对象模型, DOM 是 W3C(万维网联盟)的标准。DOM 定义了访问 HTML 和 XML 文档的标准:独立于平台和语言的接口. W3C DOM 标准被分为 3 个不同的部分:
l 核心 DOM - 针对任何结构化文档的标准模型
Node
Document
Element
Attriubute
Text
l XML DOM - 针对 XML 文档的标准模型
l HTML DOM - 针对 HTML 文档的标准模型
7.3. BOM对象详解
1) Window对象
l Window 对象是浏览器端JavaScript的顶层对象(全局对象)
l Window 对象代表一个浏览器窗口或一个框架。
l Window浏览器自动创建。
属性 |
描述 |
对 Document 对象的只读引用 |
|
对 History 对象的只读引用 |
|
用于窗口或框架的 Location 对象 |
|
parent |
返回父窗口。 |
返回对当前窗口的引用。等价于 Window 属性 |
|
window |
window 属性等价于 self 属性 |
对 Navigator 对象的只读引用 |
|
对 Screen 对象的只读引用。 |
方法 |
描述 |
显示带有一段消息和一个确认按钮的警告框。 |
|
显示带有一段消息以及确认按钮和取消按钮的对话框。 |
|
显示可提示用户输入的对话框。 |
|
打开一个新的浏览器窗口或查找一个已命名的窗口。 |
|
关闭浏览器窗口。 |
注: window的属性和方法可以直接引用, 而不用通过window对象
2). Location 对象
l 包含有关当前 URL 的信息, 并可以指定新的url
l 一般我们用它来请求一个新的资源:
window.location.href = “http://www.atguigu.com”; window.location = “http://www.atguigu.com”; |
3). History 对象
l 包含浏览器前面浏览过的一系列URL 的信息
l 一般我们用它来显示上一个页面
window.history.back(); window.history.go(-1); |
4). Document对象
l Document对象代表整个HTML文档,可用来访问页面中的所有元素。
l Document对象window对象的一个部分,可通过window.document访问
方法 |
描述 |
返回对拥有指定id的第一个对象的引用 |
|
返回带有指定标签名的对象集合 |
|
向文档写 HTML 表达式 或 JavaScript 代码 |
8. js插件spket的安装
l 到http://www.spket.com/download.html下载 Plugin 版本(spket-1.6.23.zip),解压后直接放置于Eclipse的dropins目录下(..dropins/eclipse/..),重启Eclipse.
l Window -> Preferences ->General-> Editors-> File Associations-> 选择*.js,将Spket JavaScript Editor设为Default
配置jQuery
l Window -> Preferences -> Spket -> JavaScript Profiles -> New,输入“jQuery”点击OK; 选择“jQuery” 并点击“Add Library”然后在下拉条中选取“jQuery”; 选择 “jQuery”并点击“Add File”,然后选中你下载的jQuery.js 文件;设 成Default;
核心Javascript学习的更多相关文章
- JavaScript 学习(3)核心对象
##JavaScript 学习 3 1.核心对象 1.1 String对象 声明和生成 var myString="Hello"; var myString=new String( ...
- JavaScript学习(一) —— 环境搭建与JavaScript初探
1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...
- JavaScript学习总结(二)
JavaScript学习总结(二) ---- 对象 在JavaScript中,几乎用到的每个js都离不开它的对象.下面我们深入了解一下js对象. js中对象的分类跟之前我们学过的语言中函数的分类一样, ...
- JavaScript学习总结 之对象
JavaScript学习总结(二) ---- 对象 在JavaScript中,几乎用到的每个js都离不开它的对象.下面我们深入了解一下js对象. js中对象的分类跟之前我们学过的语言中函数的分类一样, ...
- JavaScript 学习推荐
主要是个人的学习网站,书籍推荐,还有个人学习经历,以及一些学习经验或技巧 JavaScript学习网站推荐 如果想快速入门,这些是很推荐的网站 快速入门,很快能让你了解前端,有什么,做什么, ...
- 最棒的 JavaScript 学习指南(2018版)
译者注:原文作者研究了近2.4万篇 JavaScript 文章得出这篇总结,全文包含学习指南.新人上手.Webpack.性能.基础概念.函数式编程.面试.教程案例.Async Await.并发.V8. ...
- JavaScript学习知识点归纳
JavaScript学习包括几大方面: 1.基础语法 2.JavaScript核心对象 3.DOM操作 4.BOM操作 5.正则表达式 6.AJAX 7.面向对象编程 以下依次为各版块相关内容==&g ...
- JavaScript学习(1)之JavaScript基础
JavaScript学习(1)之JavaScript基础 由于工作原因,开发语言逐渐以JavaScript为主,所以,抽空学习了下JavaScript语法.等现阶段的工作稳定之后,陆续会分享下自己在学 ...
- Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
随机推荐
- Oracle中如何使用REGEXP_SUBSTR函数
REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier) __srcst ...
- Linux 上网络监控工具 ntopng 的安装
当今世界,人们的计算机都相互连接,互联互通.小到你的家庭局域网(LAN),大到最大的一个被我们称为互联网.当你管理一台联网的计算机时,你就是在管理最关键的组件之一.由于大多数开发出的应用程序都基于网络 ...
- 我的android学习经历22
eclipse自动退出 今天打开eclipse的时候出现自动退出,也就是打不开了 我上网查了一下,把工作区间改了一下就好了 修改默认工作区间的如下:(不是默认的话直接修改就好) eclipse\con ...
- 【leetcode❤python】Move Zeroes
#-*- coding: UTF-8 -*- #filter()函数可以对序列做过滤处理,就是说可以使用一个自定的函数过滤一个序列,#把序列的每一项传到自定义的过滤函数里处理,并返回结果做过滤.最终一 ...
- 用t4模板和head.js进行css和js的版本控制
head.js 介绍 http://headjs.com/site/api/v1.00.html#load 原文http://www.cnblogs.com/wang2650/p/5102690.h ...
- More Effective C++ (2)
接下来的是more effective c++ 11至20条款: 11.禁止异常信息(exceptions)传递到析构函数外.析构函数的调用情况可能有两种:(1)对象正常销毁 (2)异常传播过程中的栈 ...
- jQuery的deferred对象
应用场景:处理异步任务 看到一篇阮一峰老师的博客挺好的讲的就是jQuery的deferred对象.坦诚讲之前没有怎么用过这个东东呢. 摘其中几点记录下 (1) $.Deferred() 生成一个def ...
- QQMain
import java.awt.*; import javax.swing.*; import java.awt.event.*; public class QQMain extends JFrame ...
- poj1873The Fortified Forest
链接 居然是WF的水题~ 二进制枚举砍哪些树,剩余的树围成一个凸包. 因为传数组WA了两发,忘记修改排序数组中的p[0]; #include <iostream> #include< ...
- php三维数组变二维数组
<?php $result = Array(0 => Array(0 => Array(bid => 41,brealname => 'we教官',cid => 4 ...