JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...
此外,JavaScript 允许自定义对象
对象只是一种特殊的数据。对象拥有属性和方法
属性是与对象相关的值。访问对象属性的语法是:
objectName.propertyName下面这个例子使用了 String 对象的 length 属性来获得字符串的长度:
var message="Hello World!"; var x=message.length;方法是能够在对象上执行的动作。可以通过以下语法来调用方法:
objectName.methodName()下面这个例子使用了 String 对象的 toUpperCase() 方法来将文本转换为大写:
var message="Hello world!"; var x=message.toUpperCase();通过 JavaScript,您能够定义并创建自己的对象
创建新对象有两种不同的方法:
1.定义并创建对象的实例
下面这个例子创建了对象的一个新实例,并向其添加了三个属性:
person=new Object(); person.firstname="John"; person.age=50; person.eyecolor="blue";替代语法(使用对象 literals):
person={firstname:"John",age:50,eyecolor:"blue"};2.使用函数来定义对象,然后创建新的对象实例
下面的例子使用函数来构造对象:
function person(firstname,age,eyecolor){ this.firstname=firstname; this.age=age; this.eyecolor=eyecolor; }在JavaScript中,this通常指向的是我们正在执行的函数本身,或者是指向该函数所属的对象(运行时)
一旦您有了对象构造器,就可以创建新的对象实例,就像这样:
var myFather=new person("John",50,"blue"); var myMother=new person("Sally",48,"green");您可以通过为对象赋值,向已有对象添加新属性:假设 personObj 已存在 - 您可以为其添加这些新属性:firstname、age 以及 eyecolor:
person.firstname="John"; person.age=30; person.eyecolor="blue";方法只不过是附加在对象上的函数。在构造器函数内部定义对象的方法:
function person(firstname,age,eyecolor) { this.firstname=firstname; this.age=age; this.eyecolor=eyecolor; this.changeName=changeName; function changeName(name) { this.firstname=name; } } myMother=new person("Sally",48,"green"); myMother.changeName("Doe"); document.write(myMother.firstname);JavaScript是面向对象的语言,但JavaScript不使用类
在 JavaScript 中,不会创建类,也不会通过类来创建对象(就像在其他面向对象的语言中那样)
JavaScript 基于 prototype,而不是基于类的
JavaScript for...in 语句循环遍历对象的属性
for (variable in object){ code to be executed }注意: for...in 循环中的代码块将针对每个属性执行一次
JavaScript 只有一种数字类型。可以使用也可以不使用小数点来书写数字
var pi=3.14; // 使用小数点 var x=34; // 不使用小数点极大或极小的数字可通过科学(指数)计数法来写:
var y=123e5; // 12300000 var z=123e-5; // 0.00123所有 JavaScript 数字均为 64 位
在JavaScript中,数字不分为整数类型和浮点型类型,所有的数字都是由浮点型类型。JavaScript采用IEEE754标准定义的64位浮点格式表示数字,它能表示最大值为±1.7976931348623157 x 10308,最小值为±5 x 10 -324
整数(不使用小数点或指数计数法)最多为 15 位。小数的最大位数是 17,但是浮点运算并不总是 100% 准确:
var x = 0.2+0.1; // result will be 0.30000000000000004如果前缀为 0,则 JavaScript 会把数值常量解释为八进制数,如果前缀为 0 和 "x",则解释为十六进制数
var y = 0377; //255 var z = 0xFF;//255绝不要在数字前面写零,除非您需要进行八进制转换
默认情况下,JavaScript 数字为十进制显示。但是你可以用toString()方法 输出16进制、8进制、2进制
var myNumber=128; myNumber.toString(16); // returns 80 myNumber.toString(8); // returns 200 myNumber.toString(2); // returns 10000000当数字运算结果超过了JavaScript所能表示的数字上限(溢出),结果为一个特殊的无穷大(infinity)值,在JavaScript中以Infinity表示。同样地,当负数的值超过了JavaScript所能表示的负数范围,结果为负无穷大,在JavaScript中以-Infinity表示。无穷大值的行为特性和我们所期望的是一致的:基于它们的加、减、乘和除运算结果还是无穷大(当然还保留它们的正负号)。
myNumber=2; while (myNumber!=Infinity){ myNumber=myNumber*myNumber; document.write(myNumber +'<BR>'); }//4 16 256 65536 4294967296 18446744073709552000 3.402823669209385e+38 1.157920892373162e+77 1.3407807929942597e+154 Infinity除以0也产生了无限:
var x = 2/0; //Infinity var y = -2/0; //-InfinityNaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把Number对象设置为该值来指示其不是数字值。
可以使用 isNaN() 全局函数来判断一个值是否是 NaN 值
var x = 1000 / "Apple"; isNaN(x); // returns true var y = 100 / "1000"; isNaN(y); // returns false除以0是无穷大,无穷大也是一个数字
数字可以私有数据进行初始化,就像 x = 123;
JavaScript 数字对象初始化数据, var y = new Number(123);
var x = 123; var y = new Number(123); typeof(x) // returns Number typeof(y) // returns ObjectMAX_VALUE - 最大值
MIN_VALUE - 最小值
NEGATIVE_INFINITY - 负无穷大
POSITIVE_INFINITY - 正无穷大
NaN - 非数字
Number.prototype - 运行您向对象添加属性和方法。当构造一个属性 所有Number对象将被添加上该属性及值。当构造一个方法所有Number对象都会有这个方法。Number.prototype不允许引用一个单独的Number对象但是可以使用Number()对象。prototype 型是一个全局对象的构造函数,可用于所有的JavaScript对象
object.prototype.name=value // 语法 //例子 Number.prototype.myMet=function(){ this.myProp=this.valueOf()/2; } var n = new Number(55); n.myMet(); var x = n.myProp;object.constructor - 返回对创建此对象的数组函数的引用
function employee(name,job,born){ this.name=name; this.job=job; this.born=born; } var bill=new employee("Bill Gates","Engineer",1985); document.write(bill.constructor); //function employee(name,job,born) { this.name=name; this.job=job; this.born=born; }NumberObject.toExponential(num):把Number转换成指数计数法,num表示小数点后保留几位
NumberObject.toFixed(num):把Number四舍五入为指定小数位数的数字
NumberObject.toPrecision(num):在对象的值超出指定位数时将其转换为指数计数法,num指定有效数字的位数。如果没有提供precision参数或其值为undefined,则将转而调用toString()方法进行处理。如果提供了参数,则参数precision必须介于 [1, 21] 之间,否则将报错。如果数字的有效位数大于precision,将会根据第precision + 1位的有效数字进行四舍五入
NumberObject.toString():不加参数表示把数字转化为字符串,也可以加上几进制的参数进行转化
NumberObject.valueOf():可以把字符串转化为数字
String 对象用于处理已有的字符块。
一个字符串可以使用单引号或双引号:
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\"";字符串(String)使用长度属性length来计算字符串的长度:
var txt="Hello World!"; document.write(txt.length);字符串使用 indexOf() 来定位字符串中某一个指定的字符首次出现的位置:
var str="Click the button to locate where "locate" first occurs."; var n=str.indexOf("locate"); //20如果没找到对应的字符函数返回-1
lastIndexOf() 方法在字符串末尾开始查找字符串出现的位置
match()函数用来查找字符串中特定的字符,并且如果找到的话,则返回这个字符
var str="Hello world!"; document.write(str.match("world") + "<br>"); //world document.write(str.match("World") + "<br>"); //null document.write(str.match("world!")); //world!replace() 方法在字符串中用某些字符替换另一些字符
str="Please visit Microsoft!" var n=str.replace("Microsoft","w3cschool"); //Please visit w3cschool!"字符串大小写转换使用函数 toUpperCase() / toLowerCase():
var txt="Hello World!"; // String var txt1=txt.toUpperCase(); // txt1 is txt converted to upper var txt2=txt.toLowerCase(); // txt2 is txt converted to lower字符串使用strong>split()函数转为数组:
txt="a,b,c,d,e" // String txt.split(","); // Split on commas txt.split(" "); // Split on spacesJavascript 中可以使用反斜线()插入特殊符号,如:撇号,引号等其他特殊符号
var txt="We are the so-called "Vikings" from the north.";在JavaScript中,字符串的开始和停止使用单引号或双引号。这意味着,上面的字符串将被切成: We are the so-called。解决以上的问题可以使用反斜线来转义引号:
var txt="We are the so-called \"Vikings\" from the north.";JavaScript将输出正确的文本字符串:We are the so-called "Vikings" from the north.
下表列出其他特殊字符,可以使用反斜线转义特殊字符:
代码输出'单引号"双引号\斜杆n换行r回车ttabb空格f换页属性:
length - 计算字符串的长度
prototype - 同number
constructor - 同number
方法:
charAt() - 返回指定位置的字符
charCodeAt() - 返回指定位置的字符的 Unicode 编码
concat() - 多个字符串的连接
fromCharCode() - 根据Unicode编码返回一个字符串
indexOf() - 定位字符串中某一个指定的字符首次出现的位置
lastIndexOf() - 在字符串末尾开始查找字符串出现的位置
match() - 查找字符串中特定的字符,并且如果找到的话,则返回这个字符
replace() - 在字符串中用某些字符替换另一些字符
search() - 检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,查到后返回字符串首字母位置
stringObject.slice(start,end) - 可提取字符串的某个部分,并以新的字符串返回被提取的部分,允许使用负数作为参数
split() - 字符串以某标志分割转为数组
stringObject.substr(start,length) - 在字符串中抽取从start下标开始的指定数目的字符
stringObject.substring(start,stop) - 提取字符串中介于两个指定下标之间的字符,不接受负的参数
toLowerCase() - 字符串转为小写
toUpperCase() - 字符串转为大写
stringObject.valueOf() - 返回 Object 参数的字符串形式,如果参数为 “null”,返回“null”,否则返回objtoString()的值
日期对象用于处理日期和时间
Date() 方法 - 返回当日的日期和时间
var d=new Date(); document.write(d); //Fri Jun 02 2017 11:39:29 GMT+0800getFullYear() - 获取年份
var d = new Date().getFullYear(); //2017getTime() - 返回从 1970 年 1 月 1 日至今的毫秒数
var d = new Date().getTime(); //1496374883302setFullYear() - 设置具体的日期
var d = new Date().setFullYear(2020,10,3); //Tue Nov 03 2020 11:42:29 GMT+0800toUTCString() - 将当日的日期(根据 UTC)转换为字符串
var d = new Date().toUTCString(); //Fri, 02 Jun 2017 03:42:39 GMTgetDay() - 显示星期
var d = new Date().getDay(); //5返回创建Date对象的函数原型:
myDate.constructor;constructor 属性返回对创建此对象的 Date 函数的引用
function myFunction(){ var d = new Date(); document.write(d.constructor); } //function Date() { [native code] }prototype 属性使您有能力向对象添加属性和方法。当构造一个原型,所有的日期对象都会默认添加属性和方法。
注意: 可将属性和方法添加到原型中,但不能为对象分配其他原型。 但是可以向用户定义的对象分配新的原型。Prototype是一个全局属性,这对于几乎全部的JavaScript对象
Date.prototype.myMet=function(){ if (this.getMonth()==3){this.myProp="四月"}; if (this.getMonth()==4){this.myProp="五月"}; if (this.getMonth()==5){this.myProp="六月"}; } function myFunction(){ var d = new Date(); d.myMet(); document.write(d.myProp); } //function Date() { [native code] }数组对象是使用单独的变量名来存储一系列的值
数组可以用一个变量名存储所有的值,并且可以用变量名访问任何一个值
数组中的每个元素都有自己的的ID以便它可以很容易地被访问到
创建一个数组,有三种方法。下面的代码定义了一个名为 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"];通过指定数组名以及索引号码,可以访问某个特定的元素。
以下实例可以访问myCars数组的第一个值:
var name=myCars[0];以下实例修改了数组 myCars 的第一个元素:
myCars[0]="Opel";所有的JavaScript变量都是对象。数组元素是对象。函数是对象。因此,你可以在数组中有不同的变量类型。可以在一个数组中包含对象元素、函数、数组:
myArray[0]=Date.now; myArray[1]=myFunction; myArray[2]=myCars;使用数组对象预定义属性和方法:
var x=myCars.length // the number of elements in myCars var y=myCars.indexOf("Volvo") // the index position of "Volvo"every()方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。如果所有元素都满足条件,则返回 true。
注意: every() 不会对空数组进行检测。every() 不会改变原始数组
var ages = [32, 33, 16, 40]; function checkAdult(age) { return age >= 18; } document.write(ages.every(checkAdult)); //falsefilter()方法创建一个新的数组,新数组中元素是通过检查指定数组中符合条件的所有元素
注意: filter() 不会对空数组进行检测。filter() 不会改变原始数组
var ages = [32, 33, 16, 40]; function checkAdult(age) { return age >= 18; } document.write(ages.filter(checkAdult)); //32,33,40map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。map() 方法按照原始数组元素顺序依次处理元素
注意:map() 不会对空数组进行检测。map() 不会改变原始数组
var numbers = [4, 9, 16, 25]; function myFunction() { document.write(numbers.map(Math.sqrt)); } //2,3,4,5 var numbers = [65, 44, 12, 4]; function multiplyArrayElement(num) { return num * 10; } function myFunction() { document.getElementById("demo").innerHTML = numbers.map(multiplyArrayElement); } //650, 440, 120, 40valueOf() 是数组对象的默认方法,返回 Array 对象的原始值。该原始值由 Array 对象派生的所有对象继承。
valueOf() 方法通常由 JavaScript 在后台自动调用,并不显式地出现在代码中。valueOf() 方法不会改变原数组
function myFunction(){ var fruits = ["Banana", "Orange", "Apple", "Mango"]; document.write(fruits.valueOf()); } //Banana,Orange,Apple,MangoBoolean 对象用于转换一个不是 Boolean 类型的值转换为 Boolean 类型值 (true 或者false)
Boolean 对象代表两个值:"true" 或者 "false"
如果布尔对象无初始值或者其值为:0 -0 null "" false undefined NaN 那么对象的值为 false。否则其值为 true(即使当自变量为字符串 "false" 时)
Math(算数)对象的作用是:执行常见的算数任务。Math对象提供多种算数值类型和函数。无需在使用这个对象之前对它进行定义
Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math()。
注意: Math对象无需在使用这个对象之前对它进行定义
JavaScript 提供 8 种可被Math对象访问的算数值:
除了可被 Math 对象访问的算数值以外,还有几个函数(方法)可以使用。
使用 Math 对象的 round 方法对一个数进行四舍五入。
document.write(Math.round(4.7)); //5使用 Math 对象的 random() 方法来返回一个介于 0 和 1 之间的随机数:
document.write(Math.random());使用 Math 对象的 floor() 方法和 random() 来返回一个介于 0 和 11 之间的随机数:
document.write(Math.floor(Math.random()*11));语法:
Math.acos(x)acos() 方法可返回一个数的反余弦。返回的值是 0 到 PI 之间的弧度值
注意:如果参数 x 超过了 -1.0 ~ 1.0 的范围,那么浏览器将返回 NaN。如果参数 x 取值 -1,那么将返回 PI
语法:
Math.asin(x)asin() 方法返回-PI/2 到 PI/2 之间的弧度值
注意:如果参数 x 超过了 -1.0 ~ 1.0 的范围,那么浏览器将返回 NaN。如果参数 x 取值 1,那么将返回 PI/2。
RegExp:是正则表达式(regular expression)的简写
正则表达式是描述字符模式的对象
正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具
当您检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。简单的模式可以是一个单独的字符。更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。可以规定字符串中的检索位置,以及要检索的字符类型,等等
pattern(模式) 描述了表达式的模式
modifiers(修饰符) 用于指定全局匹配、区分大小写的匹配和多行匹配
修饰符用于执行不区分大小写和全文的搜索
i - 修饰符是用来执行不区分大小写的匹配
g - 修饰符是用于执行全文的搜索(而不是在找到第一个就停止查找,而是找到所有的匹配)
var str="Is this all there is?"; var patt1=/is/gi; document.write(str.match(patt1)); //Is,is,istest()方法搜索字符串指定的值,根据结果并返回真或假。
下面的示例是从字符串中搜索字符 "e" :
var patt1=new RegExp("e"); document.write(patt1.test("The best things in life are free")); //trueexec()方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null
下面的示例是从字符串中搜索字符 "e" :
var patt1=new RegExp("e"); document.write(patt1.exec("The best things in life are free")); //e修饰符用于执行区分大小写和全局匹配:
修饰符描述i执行对大小写不敏感的匹配g执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)m执行多行匹配方括号用于查找某个范围内的字符:
表达式描述[abc]查找方括号之间的任何字符1查找任何不在方括号之间的字符[0-9]查找任何从 0 至 9 的数字[a-z]查找任何从小写 a 到小写 z 的字符[A-Z]查找任何从大写 A 到大写 Z 的字符[A-z]查找任何从大写 A 到小写 z 的字符[adgk]查找给定集合内的任何字符2查找给定集合外的任何字符(redbluegreen)查找任何指定的选项元字符(Metacharacter)是拥有特殊含义的字符:
元字符描述.查找单个字符,除了换行和行结束符w查找单词字符W查找非单词字符d查找数字D查找非数字字符s查找空白字符S查找非空白字符b匹配单词边界B匹配非单词边界0查找 NUL 字符n查找换行符,返回换行符位置或-1f查找换页符r查找回车符t查找制表符v查找垂直制表符xxx查找以八进制数 xxx 规定的字符xdd查找以十六进制数 dd 规定的字符uxxxx查找以十六进制数xxxx规定的 Unicode 字符s 元字符用于查找空白字符
空白字符可以是:
空格符 (space character)
制表符 (tab character)
回车符 (carriage return character)
换行符 (new line character)
垂直换行符 (vertical tab character)
换页符 (form feed character)
B 元字符匹配非单词边界。匹配位置的上一个和下一个字符的类型是相同的:即必须同时是单词,或必须同时是非单词字符。字符串的开头和结尾处被视为非单词字符。如果未找到匹配,则返回 null