js高级教程

1. JavaScript 对象

1.1 JavaScript 对象

JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...
此外,JavaScript 允许自定义对象。

1.2 所有事物都是对象

JavaScript 提供多个内建对象,比如 String、Date、Array 等等。 对象只是带有属性和方法的特殊数据类型。

  • 布尔型可以是一个对象。
  • 数字型可以是一个对象。
  • 字符串也可以是一个对象
  • 日期是一个对象
  • 数学和正则表达式也是对象
  • 数组是一个对象
  • 甚至函数也可以是对象
1.3 JavaScript 对象

对象只是一种特殊的数据。对象拥有属性方法

1.4 访问对象的属性

属性是与对象相关的值。
访问对象属性的语法是:

objectName.propertyName

这个例子使用了 String对象的 length 属性来获得字符串的长度:

var message="Hello World!";
var x=message.length;

在以上代码执行后,x 的值将是:

12
1.5 访问对象的方法

方法是能够在对象上执行的动作。
您可以通过以下语法来调用方法:

objectName.methodName()

这个例子使用了 String对象的 toUpperCase() 方法来将文本转换为大写:

var message="Hello world!";
var x=message.toUpperCase();

在以上代码执行后,x 的值将是:

HELLO WORLD!
1.6 创建 JavaScript 对象

通过 JavaScript,您能够定义并创建自己的对象。
创建新对象有两种不同的方法:

  • 使用 Object 定义并创建对象的实例。
  • 使用函数来定义对象,然后创建新的对象实例。
1.7 使用 Object

在 JavaScript 中,几乎所有的对象都是 Object 类型的实例,它们都会从 Object.prototype 继承属性和方法。
Object 构造函数创建一个对象包装器。
Object构造函数,会根据给定的参数创建对象,具体有以下情况:

  • 如果给定值是 null 或 undefined,将会创建并返回一个空对象。
  • 如果传进去的是一个基本类型的值,则会构造其包装类型的对象。
  • 如果传进去的是引用类型的值,仍然会返回这个值,经他们复制的变量保有和源对象相同的引用地址。
  • 当以非构造函数形式被调用时,Object 的行为等同于 new Object()
    语法格式:
// 以构造函数形式来调用
new Object([value])vaule 可以是任何值。

以下实例使用 Object 生成布尔对象:

// 等价于 o = new Boolean(true);
var o = new Object(true);

这个例子创建了对象的一个新实例,并向其添加了四个属性:
实例

person=new Object();
person.firstname="John";
person.lastname="Doe";
person.age=50;
person.eyecolor="blue";

也可以使用对象字面量来创建对象,语法格式如下:

{ name1 : value1, name2 : value2,...nameN : valueN }

其实就是大括号里面创建 name:value 对,然后 name:value对之间以逗号 ,隔开。
实例

person={firstname:"John",lastname:"Doe",age:50,eyecolor:"blue"};

JavaScript 对象就是一个 name:value 集合。

1.8 使用对象构造器

本例使用函数来构造对象:
实例

function person(firstname,lastname,age,eyecolor)
{
    this.firstname=firstname;
    this.lastname=lastname;
    this.age=age;
    this.eyecolor=eyecolor;
}

在JavaScript中,this通常指向的是我们正在执行的函数本身,或者是指向该函数所属的对象(运行时)

1.9 创建 JavaScript 对象实例

一旦您有了对象构造器,就可以创建新的对象实例,就像这样:

var myFather=new person("John","Doe",50,"blue");
var myMother=new person("Sally","Rally",48,"green");
1.10 把属性添加到 JavaScript 对象

您可以通过为对象赋值,向已有对象添加新属性:
假设person对象已存在 - 您可以为其添加这些新属性:firstname、lastname、age 以及 eyecolor

person.firstname="John";
person.lastname="Doe";
person.age=30;
person.eyecolor="blue";
x=person.firstname;

在以上代码执行后,x 的值将是:

John
1.11 把方法添加到 JavaScript 对象

方法只不过是附加在对象上的函数。
在构造器函数内部定义对象的方法:

function person(firstname,lastname,age,eyecolor)
{
    this.firstname=firstname;
    this.lastname=lastname;
    this.age=age;
    this.eyecolor=eyecolor;
    this.changeName=changeName;
    function changeName(name)
    {
        this.lastname=name;
    }
}

changeName()函数 name 的值赋给 personlastname 属性。
现在您可以试一下:

myMother.changeName("Doe");
1.12 JavaScript 类

JavaScript 是面向对象的语言,但 JavaScript 不使用类。
在 JavaScript 中,不会创建类,也不会通过类来创建对象(就像在其他面向对象的语言中那样)。
JavaScript 基于 prototype,而不是基于类的。

1.13 JavaScript for…in 循环

JavaScript for...in 语句循环遍历对象的属性。
语法

for (variable in object)
{
    执行的代码……
}

注意:for...in循环中的代码块将针对每个属性执行一次。
实例
循环遍历对象的属性:
实例

var person={fname:"John",lname:"Doe",age:25}; 
for (x in person)
{
    txt=txt + person[x];
}
1.14 JavaScript 的对象是可变的

对象是可变的,它们是通过引用来传递的。
以下实例的person 对象不会创建副本:

var x = person;  // 不会创建 person 的副本,是引用

如果修改来 x ,person 的属性也会改变:
实例

var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"}
var x = person;
x.age = 10;           //  x.age 和 person.age 都会改变

2. JavaScript prototype

2.1 JavaScript prototype(原型对象)

所有的 JavaScript 对象都会从一个 prototype(原型对象)中继承属性和方法。
在前面的章节中我们学会了如何使用对象的构造器(constructor)
实例

function Person(first, last, age, eyecolor) {
  this.firstName = first;
  this.lastName = last;
  this.age = age;
  this.eyeColor = eyecolor;
}
var myFather = new Person("John", "Doe", 50, "blue");
var myMother = new Person("Sally", "Rally", 48, "green");

我们也知道在一个已存在的对象构造器中是不能添加新的属性的:
实例

Person.nationality = "English";

要添加一个新的属性需要在在构造器函数中添加:
实例

function Person(first, last, age, eyecolor) {
  this.firstName = first;
  this.lastName = last;
  this.age = age;
  this.eyeColor = eyecolor;
  this.nationality = "English";
}
2.2 prototype 继承

所有的 JavaScript 对象都会从一个 prototype(原型对象)中继承属性和方法:

  • Date对象从Date.prototype 继承。
  • Array 对象从 Array.prototype 继承。
  • Person对象从Person.prototype继承。
    所有 JavaScript中的对象都是位于原型链顶端的 Object 的实例。
    JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。
    Date对象, Array对象, 以及Person 对象从 Object.prototype继承。
2.3 添加属性和方法

有的时候我们想要在所有已经存在的对象添加新的属性或方法。
另外,有时候我们想要在对象的构造函数中添加属性或方法。
使用 prototype 属性就可以给对象的构造函数添加新的属性:
实例

function Person(first, last, age, eyecolor) {
  this.firstName = first;
  this.lastName = last;
  this.age = age;
  this.eyeColor = eyecolor;
}
Person.prototype.nationality = "English";

当然我们也可以使用 prototype 属性就可以给对象的构造函数添加新的方法:
实例

function Person(first, last, age, eyecolor) {
  this.firstName = first;
  this.lastName = last;
  this.age = age;
  this.eyeColor = eyecolor;
}
 
Person.prototype.name = function() {
  return this.firstName + " " + this.lastName;
};

3. JavaScript Number

3.1 JavaScript Number 对象

JavaScript 只有一种数字类型。
可以使用也可以不使用小数点来书写数字。

3.2 JavaScript 数字

JavaScript 数字可以使用也可以不使用小数点来书写:
实例

var pi=3.14;    // 使用小数点
var x=34;       // 不使用小数点

极大或极小的数字可通过科学(指数)计数法来写:
实例

var y=123e5;    // 12300000
var z=123e-5;   // 0.00123
3.3 所有 JavaScript 数字均为 64 位

JavaScript 不是类型语言。与许多其他编程语言不同,JavaScript 不定义不同类型的数字,比如整数、短、长、浮点等等。
在JavaScript中,数字不分为整数类型和浮点型类型,所有的数字都是由 浮点型类型。JavaScript 采用 IEEE754 标准定义的 64 位浮点格式表示数字,它能表示最大值为±1.7976931348623157e+308,最小值为±5e-324

值 (aka Fraction/Mantissa)指数Sign
52 bits (0 - 51)11 bits (50 - 62)1 bit (63)
3.4 精度

整数(不使用小数点或指数计数法)最多为 15 位。
实例

var x = 999999999999999;   // x 为 999999999999999
var y = 9999999999999999;  // y 为 10000000000000000

小数的最大位数是 17,但是浮点运算并不总是 100% 准确:
实例

var x = 0.2+0.1; // 输出结果为 0.30000000000000004
3.5 八进制和十六进制

如果前缀为 0,则 JavaScript 会把数值常量解释为八进制数,如果前缀为 0 和 “x”,则解释为十六进制数。
实例

var y = 0377;
var z = 0xFF;

绝不要在数字前面写零,除非您需要进行八进制转换。
默认情况下,JavaScript 数字为十进制显示。
但是你可以使用 toString()方法 输出16进制、8进制、2进制
实例

var myNumber=128;
myNumber.toString(16);   // 返回 80
myNumber.toString(8);    // 返回 200
myNumber.toString(2);    // 返回 10000000
3.6 无穷大(Infinity)

当数字运算结果超过了JavaScript所能表示的数字上限(溢出),结果为一个特殊的无穷大(infinity)值,在JavaScript中以Infinity表示。同样地,当负数的值超过了JavaScript所能表示的负数范围,结果为负无穷大,在JavaScript中以-Infinity表示。无穷大值的行为特性和我们所期望的是一致的:基于它们的加、减、乘和除运算结果还是无穷大(当然还保留它们的正负号)。
实例

myNumber=2;
while (myNumber!=Infinity)
{
    myNumber=myNumber*myNumber; // 重复计算直到 myNumber 等于 Infinity
}

除以0也产生了无限:
实例

var x = 2/0;
var y = -2/0;
3.6 NaN - 非数字值

NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number对象设置为该值,来指示其不是数字值。
你可以使用 isNaN() 全局函数来判断一个值是否是 NaN 值。
实例

var x = 1000 / "Apple";
isNaN(x); // 返回 true
var y = 100 / "1000";
isNaN(y); // 返回 false

除以0是无穷大,无穷大是一个数字:
实例

var x = 1000 / 0;
isNaN(x); // 返回 false
3.7 数字可以是数字或者对象

数字可以私有数据进行初始化,就像 x = 123;
JavaScript 数字对象初始化数据, var y = new Number(123);
实例

var x = 123;
var y = new Number(123);
typeof(x) // 返回 Number
typeof(y) // 返回 Object

实例

var x = 123;             
var y = new Number(123);
(x === y) // 为 false,因为 x 是一个数字,y 是一个对象
3.8 Number 属性
属性描述
Number.MAX_VALUE最大值
Number.MIN_VALUE最小值
Number.NaN非数字
Number.NEGATIVE_INFINITY负无穷,在溢出时返回
Number.POSITIVE_INFINITY正无穷,在溢出时返回
Number.EPSILON表示 1 和比最接近 1 且大于 1 的最小 Number 之间的差别
Number.MIN_SAFE_INTEGER最小安全整数。
Number.MAX_SAFE_INTEGER最大安全整数。
3.9 数字方法
方法描述
Number.parseFloat()将字符串转换成浮点数,和全局方法 parseFloat() 作用一致。
Number.parseInt()将字符串转换成整型数字,和全局方法 parseInt() 作用一致。
Number.isFinite()判断传递的参数是否为有限数字。
Number.isInteger()判断传递的参数是否为整数。
Number.isNaN()判断传递的参数是否为 isNaN()。
Number.isSafeInteger()判断传递的参数是否为安全整数。
3.10 数字类型原型上的一些方法
方法描述
toExponential()返回一个数字的指数形式的字符串,如:1.23e+2
toFixed()返回指定小数位数的表示形式。var a=123;b=a.toFixed(2); // b=“123.00”
toPrecision()返回一个指定精度的数字。如下例子中,a=123 中,3会由于精度限制消失:var a=123; b=a.toPrecision(2); // b=“1.2e+2”

4. JavaScript 字符串(String)

4.1 JavaScript 字符串(String) 对象

String 对象用于处理已有的字符块。

4.2 JavaScript 字符串

一个字符串用于存储一系列字符就像 "John Doe".
一个字符串可以使用单引号或双引号:
实例

var carname="Volvo XC60";
var carname='Volvo XC60';

你使用位置(索引)可以访问字符串中任何的字符:
实例

var character=carname[7];

字符串的索引从零开始, 所以字符串第一字符为 [0],第二个字符为 [1], 等等。
你可以在字符串中使用引号,如下实例:
实例

var answer="It's alright";
var answer="He is called 'Johnny'";
var answer='He is called "Johnny"';
或者你可以在字符串中使用转义字符(\)使用引号:

实例

var answer='It\'s alright';
var answer="He is called \"Johnny\"";
4.3 字符串(String)

字符串(String)使用长度属性length来计算字符串的长度:
实例

var txt="Hello World!";
document.write(txt.length);
var txt="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
document.write(txt.length);
4.4 在字符串中查找字符串

字符串使用 indexOf() 来定位字符串中某一个指定的字符首次出现的位置:
实例

var str="Hello world, welcome to the universe.";
var n=str.indexOf("welcome");

如果没找到对应的字符函数返回-1
lastIndexOf() 方法在字符串末尾开始查找字符串出现的位置。

4.5 内容匹配

match()函数用来查找字符串中特定的字符,并且如果找到的话,则返回这个字符。
实例

var str="Hello world!";
document.write(str.match("world") + "<br>");
document.write(str.match("World") + "<br>");
document.write(str.match("world!"));
4.6 替换内容

replace() 方法在字符串中用某些字符替换另一些字符。
实例

str="Please visit Microsoft!"
var n=str.replace("Microsoft","Runoob");
4.7 字符串大小写转换

字符串大小写转换使用函数toUpperCase() / toLowerCase():
实例

var txt="Hello World!";       // String
var txt1=txt.toUpperCase();   // txt1 文本会转换为大写
var txt2=txt.toLowerCase();   // txt2 文本会转换为小写
4.8 字符串转为数组

字符串使用split()函数转为数组:
实例

txt="a,b,c,d,e"   // String
txt.split(",");   // 使用逗号分隔
txt.split(" ");   // 使用空格分隔
txt.split("|");   // 使用竖线分隔 
4.9 特殊字符

Javascript 中可以使用反斜线(\)插入特殊符号,如:撇号,引号等其他特殊符号。
查看如下 JavaScript 代码:

var txt="We are the so-called "Vikings" from the north.";
document.write(txt);

在JavaScript中,字符串的开始和停止使用单引号或双引号。这意味着,上面的字符串将被切成: We are the so-called
解决以上的问题可以使用反斜线来转义引号:

var txt="We are the so-called \"Vikings\" from the north.";
document.write(txt);
JavaScript将输出正确的文本字符串:We are the so-called "Vikings" from the north.

下表列出其他特殊字符,可以使用反斜线转义特殊字符:

代码输出
单引号
"双引号
\斜杆
\n换行
\r回车
\ttab
\b空格
\f换页
4.10 字符串属性和方法

属性:

  • length
  • prototype
  • constructor
    方法:
  • charAt()
  • charCodeAt()
  • concat()
  • fromCharCode()
  • indexOf()
  • lastIndexOf()
  • match()
  • replace()
  • search()
  • slice()
  • split()
  • substr()
  • substring()
  • toLowerCase()
  • toUpperCase()
  • valueOf()

5. JavaScript Date(日期)

5.1 JavaScript Date(日期) 对象

日期对象用于处理日期和时间。
如何使用Date()方法获得当日的日期。

getFullYear()
使用 getFullYear() 获取年份。

getTime()
getTime() 返回从 1970 年 1 月 1 日至今的毫秒数。

setFullYear()
如何使用setFullYear() 设置具体的日期。

toUTCString()
如何使用 toUTCString()将当日的日期(根据 UTC)转换为字符串。

getDay()
如何使用getDay() 和数组来显示星期,而不仅仅是数字。

Display a clock
如何在网页上显示一个钟表。

5.2 创建日期

Date 对象用于处理日期和时间。
可以通过 new 关键词来定义 Date 对象。以下代码定义了名为 myDateDate 对象:
有四种方式初始化日期:

new Date();
new Date(value);
new Date(dateString);
new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);

上面的参数大多数都是可选的,在不指定的情况下,默认参数是0。
实例化一个日期的一些例子:

var today = new Date()
var d1 = new Date("October 13, 1975 11:13:00")
var d2 = new Date(79,5,24)
var d3 = new Date(79,5,24,11,33,0)
5.3 设置日期

通过使用针对日期对象的方法,我们可以很容易地对日期进行操作。
在下面的例子中,我们为日期对象设置了一个特定的日期 (2010 年 1 月 14 日):

var myDate=new Date();
myDate.setFullYear(2010,0,14);

在下面的例子中,我们将日期对象设置为 5 天后的日期:

var myDate=new Date();
myDate.setDate(myDate.getDate()+5);

注意: 如果增加天数会改变月份或者年份,那么日期对象会自动完成这种转换。

5.4 两个日期比较

日期对象也可用于比较两个日期。
下面的代码将当前日期与 2100 年 1 月 14 日做了比较:

var x=new Date();
x.setFullYear(2100,0,14);
var today = new Date();
if (x>today)
{
    alert("今天是2100年1月14日之前");
}
else
{
    alert("今天是2100年1月14日之后");
}

6. JavaScript Array

6.1 JavaScript Array(数组) 对象

数组对象的作用是:使用单独的变量名来存储一系列的值。
创建数组, 为其赋值:
实例

var mycars = new Array();
mycars[0] = "Saab";
mycars[1] = "Volvo";
mycars[2] = "BMW";

页面底部你可以找到更多的实例。

6.2 什么是数组?

数组对象是使用单独的变量名来存储一系列的值。
如果你有一组数据(例如:车名字),存在单独变量如下所示:

var car1="Saab";
var car2="Volvo";
var car3="BMW";

然而,如果你想从中找出某一辆车?并且不是3辆,而是300辆呢?这将不是一件容易的事!
最好的方法就是用数组。
数组可以用一个变量名存储所有的值,并且可以用变量名访问任何一个值。
数组中的每个元素都有自己的的ID,以便它可以很容易地被访问到。

6.3 创建一个数组

创建一个数组,有三种方法。
下面的代码定义了一个名为 myCars的数组对象:
1: 常规方式:

var myCars=new Array();
myCars[0]="Saab";      
myCars[1]="Volvo";
myCars[2]="BMW";

2: 简洁方式:

var myCars=new Array("Saab","Volvo","BMW");

3: 字面:

var myCars=["Saab","Volvo","BMW"];
6.4 访问数组

通过指定数组名以及索引号码,你可以访问某个特定的元素。
以下实例可以访问myCars数组的第一个值:

var name=myCars[0];

以下实例修改了数组 myCars 的第一个元素:

myCars[0]="Opel";

[0] 是数组的第一个元素。[1] 是数组的第二个元素。

6.5 在一个数组中你可以有不同的对象

所有的JavaScript变量都是对象。数组元素是对象。函数是对象。
因此,你可以在数组中有不同的变量类型。
你可以在一个数组中包含对象元素、函数、数组:

myArray[0]=Date.now;
myArray[1]=myFunction;
myArray[2]=myCars;
6.6 数组方法和属性

使用数组对象预定义属性和方法:

var x=myCars.length             // myCars 中元素的数量
var y=myCars.indexOf("Volvo")   // "Volvo" 值的索引值
6.7 创建新方法

原型是JavaScript全局构造函数。它可以构建新Javascript对象的属性和方法。
实例:创建一个新的方法。

Array.prototype.myUcase=function(){
    for (i=0;i<this.length;i++){
        this[i]=this[i].toUpperCase();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ronghua_yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值