JavaScript
是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果
通常JavaScript
脚本是通过嵌入在HTML
中来实现自身的功能的
JavaScript
是一种解释性脚本语言(代码不进行预编译)
主要用来向HTML
(标准通用标记语言下的一个应用)页面添加交互行为
可以直接嵌入HTML
页面,但写成单独的js文件有利于结构和行为的分离
跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如Windows
、Linux
、Mac
、Android
、iOS
等)。
Javascript
脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架
Javascript
数据类型
基本数据类型
1、数字(Number):包括浮点数与整数
2、字符串(String):包括由任意数量字符组成的序列
3、布尔值(Boolean):包括true和false
4、Undefined
:当我们试图访问一个不存在的变量时,就会得到一个特殊的值undefined
。除此之外,使用已定义却未赋值的变量也会如此,以为js会自动将变量在初始化之前的值设定为undefined
。而Undefined
类型的值只有一个,那就是undefined
5、Null
:只包含一个值的特殊数据类型。所谓的null
值,通常是没有值或空值,不代表任何东西。null
与undefined
最大的不同在于,被赋予null
的变量通常被认为是已经定义了的,只不过它不代表任何东西。
6、Symbol
: 是 ES6 引入了一种新的原始数据类型,表示独一无二的值
引用数据类型
对象(Object)、
数组(Array)、
函数(Function)
JavaScript语法 JavaScript输出
JavaScript
可以通过不同的方式来输出数据:
使用 window.alert()
弹出警告框。
使用 document.write()
方法将内容写到 HTML 文档中。
使用 innerHTML
写入到 HTML 元素。
使用 console.log()
写入到浏览器的控制台。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <script > window .alert (5 + 6 ); </script > <script > document .write (Date ()); </script > <script > document .getElementById ("demo" ).innerHTML = "段落已修改。" ; </script > <script > a = 5 ; b = 6 ; c = a + b; console .log (c); </script >
JavaScript
注释
JavaScript
不会执行注释中的代码
JavaScript
中的注释语句和iOS
中的一样
单行注释以 //
开头
多行注释以 /*
开始,以 */
结尾
分号;
分号用于分隔 JavaScript 语句。
通常我们在每条可执行的语句结尾添加分号。
使用分号的另一用处是在一行中编写多条语句
也可能看到不带有分号的案例, 在JavaScript
中,用分号来结束语句是可选的, 不加分号亦可
1 2 3 4 5 6 7 var num1 = 5 ;console .log (num1);var num1 = 5 console .log (num1)
数字Number
JavaScript
中不区分整数值和浮点数值,所有数字均用浮点数值表示
JS采用IEEE754
标准定义的64位浮点格式表示数字,这意味着它能表示的最大值是±1.7976031348623157×10308,最小值是±5×10-324
按照JS中的数字格式,能够表示的整数范围是-90071992547409929007199254740992(即 -253253)
需要注意的是,JS中实际的操作(比如数组索引,位操作符)则是基于32位整数。
类型操作符typeof
当以下num定义后没有任何赋值的情况下num的类型是Undefined
,值为undefined
1 2 3 4 5 6 7 8 9 var num;console .log (num); console .log (typeof num);
进制数 1 2 3 4 5 6 7 8 9 num1 = 0377 ; console .log (num1);num1 = 0xff ; console .log (num1);
特殊值
Infinity
:代表的是超出js处理范围的数值,但它依然是一个数字
任何数除以0结果为Infinity
Infinity
与其他任何操作数执行任何算术运算的结果也是Infinity
NaN
:表示不是数字,但事实上它依然属于数字类型,只不过是一种特殊的数字罢了
如果我们在算术运算中使用了不恰当的操作数,导致运算失败,就会得到NaN
NaN
具有传染性,只要算术运算中存在一个NaN
,整个运算就会失败
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 num1 = 1e308 ; console .log (num1); num1 = 1e309 ; console .log (num1); console .log (10 / 0 ); console .log (num1 * 2 ); console .log (Infinity + (-Infinity )); console .log (typeof NaN ); console .log (10 * 'f' ); console .log (1 + 2 + NaN );
Math
运算JavaScript
用Math
对象实现复杂的运算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Math .pow (2 ,3 ) Math .round (.6 ) Math .ceil (.6 ) Math .floor (.6 ) Math .abs (-5 ) Math .max (x,y,z) Math .min (x,y,z) Math .random () Math .PI Math .E Math .sqrt (3 ) Math .pow (3 ,1 /3 ) Math .sin (0 ) Math .log (10 ) Math .log (100 )/Math .LN10 Math .log (512 )/Math .LN2 Math .exp (3 )
JavaScript布尔 在JavaScript
中有布尔值和falsy
值和truthy
值
布尔(逻辑)只能有两个值:true
或 false
所有的Falsy
值,当进行逻辑判断时均为false
除Falsy
值之外的所有的值均为Truthy
,当进行逻辑判断时均为true
Infinity
、空数组、”0”都是Truthy
值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 var br = true ;var br2 = false console .log (br);console .log (typeof br);
判断函数
isNaN(info)
判断值是否是NaN,如果info===NaN
则返回true
,否则返回false
isFinite()
检测是否是一个既非Infinity
也非NaN
的数字
1 2 3 4 5 6 7 8 9 10 console .log (isNaN (NaN ));console .log (isNaN (parseInt ("abc" )));console .log (isNaN (123 ));console .log (isFinite (Infinity ));console .log (isFinite (-Infinity ));console .log (isFinite (NaN ));console .log (isFinite (123 ));
字符串 js中一对双引号或单引号之间的任何都会被视为一个字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 var str = "https://titanjun.top" ;var arr = "/" ;var ret = str + arr;console .log (ret);var num = 10 ;ret = str + num; console .log (ret);var jsString = "Hello,JavaScript" ;console .log (typeof jsString) var s0 = jsString.length ; var s1 = jsString.charAt (0 ) ; var s2 = jsString.charAt (s0 - 1 ) var s3 = jsString.substring (1 , 4 ) var s4 = jsString.slice (1 , 4 ) var s5 = jsString.slice (-3 ) var s6 = jsString.indexOf ("a" ) var s7 = jsString.lastIndexOf ("a" ) var s8 = jsString.indexOf ("a" , 2 ) var s9 = jsString.split ("," ) var s10 = jsString.replace ("e" , "E" ) var s11 = jsString.toUpperCase () var s12 = jsString.toLowerCase () var sArr = [s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12]for (var i = 0 ; i < sArr.length ; i++) { console .log (sArr[i]) }
日期Date
日期对象用于处理日期和时间
格林尼治时间(GTM):是英国郊区皇家格林尼治天文台的时间,因为地球自转的原因,不同经度上的时间是不相同的,格林尼治天文台是经度为0的地方。世界上发生的重大时间都是以格林尼治时间时间为标准的。
世界协调时间(UTC):世界时间。1970年1月1日0点。
ECMAScript
中的Date
类型是在早期Java
中的java.util.Date
类的基础上构建的。为此Date
类型使用自UTC1970年1月1日午夜(零时)开始经过的毫秒数保存时间的。该Date类型保存的日期能够精确到1970年1月1日之前和之后的285616年
创建Date 创建时间使用构造函数法, new Date()
, 不论Date()
是否带参数,返回的都是当前时间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 var date1 = new Date ()console .log (typeof date1) console .log (date1)var date2 = Date ("2016-09-18" );console .log (typeof date2) console .log (date2)var date3 = new Date (1000 )console .log (date3)var date4 = new Date (2016 ,09 ,9 ,10 ,10 ,10 ,1000 )console .log (date4)
Date对象方法 获取时间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 var date = new Date ();console .log (date.getFullYear ());console .log (date.getMonth ());console .log (date.getDate ());console .log (date.getDay ());console .log (date.getHours ());console .log (date.getMinutes ());console .log (date.getSeconds ());console .log (date.getMilliseconds ());console .log (date.getTime ());
设置时间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 date.setFullYear (2015 ); date.setMonth (8 ); date.setDate (29 ); date.setHours (13 ); date.setMinutes (56 ); date.setSeconds (10 ); date.setMilliseconds (888 ); console .log (date)date.setTime (1308484904898 ); console .log (date);
Date转换格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 console .log (date.toString ())console .log (date.toDateString ())console .log (date.toTimeString ())console .log (date.toLocaleString ());console .log (date.toLocaleDateString ());console .log (date.toLocaleTimeString ());console .log (date.toISOString ())console .log (date.toJSON ())console .log (date.toUTCString ())
parse 返回某日期距离1970年1月1日0点的毫秒数
1 2 3 4 console .log (Date .parse ("2018-10-10" ));
Date间运算 1 2 3 4 5 6 7 8 9 var date1 = new Date ("2018-10-10 10:10:10" );var date2 = new Date ("2018-10-10 10:10:12" );console .log (date2 - date1) console .log (date2 + date1) console .log (typeof (date2 + date1))
数组Array
数组是值的有序集合
JavaScript
数组事务类型的:数组元素可以使任何类型, 同一数组中的不同元素也可以是不同类型
数组的元素也可以是对象或者其他数组
JavaScript
数组可能是稀疏的: 数组元素的索引不一定是连续的,之间可能有空缺
稀疏数组的length
比任何元素的索引都要大
JavaScript
中的数组可以存储多个不同类型的数据
创建数组 直接量创建 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 var empty = []; var pram = [2 , 3 , 2 ] var misc = [1.1 , true , "a" ] var base = 1024 var baseArr = [base, base + 1 , base + 2 , base + 3 ]var array3 = [[1 , {x : 1 , y : 2 }], [2 , {x : 3 , y : 4 }]]var undef1 = [1 , ,3 ] var undef2 = [, ,]
Array()创建 1 2 3 4 5 6 7 var a = new Array ()var a1 = new Array (10 )var a2 = new Array (1 , 2 , 3 , "a" )
数组操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 var value = a2[3 ]var arr = [1 , 2 , 3 , 4 , 5 , 6 ]var arrLength = arr.length arr.length = 4 arr.length = 0 arr.length = 5 var a0 = []a0[0 ] = 3 a0[1 ] = "one"
数组的方法 主要介绍ECMAScript
中的方法
join()
0.不改变原数组
1.将数组所有的元素都转化成字符串,并连接在一起,返回生成后的字符串(如不指定分隔符默认使用逗号)
2.join是String.split()的逆向操作
1 2 3 4 5 var arr0 = [1 , 2 , 3 , 4 ]var join1 = arr0.join () var join2 = arr0.join ("" ) var join3 = arr0.join ("-" ) console .log (join1,join2,join3)
reverse()
1 2 arr0.reverse () console .log (arr0)
sort()
0.改变原数组
1.不带参数时,以字母表顺序排序
2.如果数组包含undefined,则会被排到数组的末尾
3.字母排序区分大小写,A < a
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 var arr1 = new Array ("tian" , "quan" , "jun" )arr1.sort () console .log (arr1)var arr2 = new Array ("ant" , "Bug" , "cat" , "Dog" )arr2.sort () console .log (arr2)arr2.sort (function (s, t ) { var a = s.toLowerCase () var b = t.toLowerCase () if (a < b) return -1 if (a > b) return 1 return 0 }) console .log (arr2)
concat() 创建并返回一个新数组
1 2 3 4 5 6 7 8 9 var arr4 = [0 , 2 , 3 ]var concat1 = arr4.concat () var concat2 = arr4.concat (1 , 4 ) var concat3 = arr4.concat ([1 , 4 ]) var concat4 = arr4.concat ([1 , 4 ], [5 , 6 ]) var concat5 = arr4.concat (1 , [4 , [5 , 6 ]]) var concatArr = [concat1, concat2, concat3, concat4, concat5]console .log (concatArr)
slice()
注意:
1.返回数组的部分数组
2.不改变原数组
3.两个参数,分别表示始末位置,含左不含右
4.1表示第一个元素,-1表示倒数第一个元素
5.只有一个参数,默认以此参数开始,到最后一个元素结束
1 2 3 4 5 6 7 var arr3 = [1 , 2 , 3 , 4 , 5 ]var slice1 = arr3.slice (0 ,2 ) var slice2 = arr3.slice (3 ) var slice3 = arr3.slice (1 ,-2 ) var slice4 = arr3.slice (-3 ,-2 ) var sliceArr = [slice1, slice2, slice3, slice4]console .log (sliceArr)
splice()
1.在数组中插入或删除元素的通用方法
2.会修改原数组,会改变数组的索引值
3.两个参数,参数一:起始位置;参数二:处理元素的个数(可省略)
4.若省略第二个参数,默认从起始位置到最后
5.如果没有元素就返回空数组
1 2 3 4 5 6 7 8 9 var m = [1 , 2 , 3 , 4 , 5 , 6 , 7 ]var splice1 = m.splice (4 ) console .log (m)var splice2 = m.splice (1 , 2 ) console .log (m)var splice3 = m.splice (1 , 1 ) console .log (m)var spliceArr = [splice1, splice2, splice3]console .log (spliceArr)
push和pop
方法将数组当成栈使用
1.push方法在尾部添加一个或者多个元素,返回新的数组长度
2.pop删除数组的最后一个元素,减小数组的长度,返回删除的值
3.改变原数组的值和长度
1 2 3 4 5 6 7 8 9 10 var m0 = []var pp1 = m0.push (1 , 2 ) var pp2 = m0.pop () var pp3 = m0.push (3 , 4 ) var pp4 = m0.pop () var pp5 = m0.push ([9 ,0 ]) var pp6 = m0.pop () var pp7 = m0.pop () var ppArr = [pp1, pp2, pp3, pp4, pp5, pp6, pp7]console .log (ppArr)
unshift和shift
1.unshift在头部添加一个或者多个元素,返回长度
2.shift删除数组的第一个元素,返回删除的元素
3.改变原数组,改变原数组的索引
4.unshift插入多个元素时,试一次性插入的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var sh = []var sh1 = sh.unshift (1 ) var sh2 = sh.unshift (22 ) var sh3 = sh.shift () var sh4 = sh.unshift (3 , [4 , 5 ]) var sh5 = sh.shift () var sh6 = sh.shift () var shiftArr = [sh1, sh2, sh3, sh4, sh5, sh6]console .log (shiftArr)sh.unshift (3 , 4 ) sh.unshift (3 ) sh.unshift (4 )
toString和toLocalString
1.toString()将数组元素转化成字符串后,用都好链接输出
2.toString()和join()不加参数的返回的值是一样的
3.toLocalString()是toString()的本地化版本
1 2 3 4 5 6 7 var str0 = [1 , 2 , 3 ].toString () var str1 = ["a" , "b" , "c" ].toString () var str2 = [1 , [2 , "c" ]].toString () var str3 = [1 , 2 , 3 ].toLocaleString () var strArr = [str0, str1, str2, str3, str4]console .log (strArr)
ECMAScript5
1.ECMAScript5
定义了九个新的数组方法
2.大多数ECMAScript5
数组方法的第一个参数是一个函数
2.第二个参数是可选的,如果有,则调用的函数被看作是第二个参数的方法
3.也就是说在调用函数时,传递进去的第二个参数作为它的this关键字的值来使用
4.ECMAScript5
中的数组方法不会修改他们调用的原始数组
5.传递给这些方法的函数是可以改变这些数组的
forEach()
1.方法从头到尾遍历数组,为每个元素调用指定的函数
2.forEach使用三个参数调用该函数:数组元素,元素索引, 数组本身
1 2 3 4 5 6 7 8 9 10 11 12 13 var data1 = [1 , 2 , 3 , 4 , 5 ]var sum = 0 data1.forEach (function (value ) { sum += value }) data1.forEach (function (value, i, arr ) { arr[i] = value + 1 })
map()
1.返回一个新数组,不改变原数组
2.原数组若是稀疏数组,返回也是稀疏数组
3.具有相同的长度,相同的缺失元素
1 2 3 4 var arr2 = data1.map (function (x ) { return x * x })
filter() 逻辑判定,过滤数组
1.返回原数组的一个子集
2.返回原数组符合条件的元素,组成新数组
3.会将稀疏数组压缩,返回的是稠密数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 var arr3 = data1.filter (function (x ) { return x > 3 }) var data2 = [1 , 2 , 3 , 4 , 5 ]var arr4 = data2.filter (function (i ) { return i % 2 == 0 }) var data3 = [1 , 2 , , , null , 5 ]var arr5 = data3.filter (function (x ) { return x !== undefined && x != null }) console .log (arr5)
every和some 数组的逻辑判定
1.对数组元素应用指定的函数进行判定
2.返回trur或者false
2.every()都为true返回true,否则返回false
3.some()都为false,返回false;有一个为true,返回true
4.一旦该方法确定了返回值,就会停止遍历数组
5.空数组,every()返回true,some()返回false
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var data4 = [1 , 2 , 3 , 4 , 5 ]var sum1 = data4.every (function (x ) { return x < 10 }) var sum2 = data4.every (function (x ) { return x % 2 === 0 }) var sum3 = data4.some (function (x ) { return x % 2 === 0 }) var sum4 = data4.some (isNaN )
reduce和reduceRigh
作用: 将数组元素进行组合生成单个值
1.reduce()需要两个参数;参数一:执行操作的函数;参数二:传递给函数的初始值
2.reduceRight()是倒叙操作,功能与reduce相同
1 2 3 4 5 6 7 8 9 10 11 12 13 14 var data5 = [1 , 2 , 3 , 4 , 5 ]var sn0 = data5.reduce (function (x, y ) { return x + y }, 0 ) var sn1 = data5.reduce (function (x, y ) { return x * y }, 1 ) var sn2 = data5.reduce (function (x, y ) { return x > y ? x : y })
indexOf和lastIndexOf
1.搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引,如果没有找到就返回-1
2.indexOf(),从前向后搜索,lastIndexOf()从后向前搜索
3.参数一:元素值; 参数二: 搜索的起始位置(可省略,默认从头开始)
1 2 3 4 5 6 7 var data6 = [0 , 1 , 2 , 1 , 0 ]var index1 = data6.indexOf (1 ) var index2 = data6.indexOf (3 ) var index3 = data6.lastIndexOf (1 ) var index4 = data6.indexOf (2 , 1 )var index5 = data6.lastIndexOf (2 , -1 )
判定一个位置对象是否为数组 1 2 3 var data = [1 , 2 ]console .log (data.isArray ())
类型间的转换 Number() 将其他类型数据转成Number类型数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 console .log (Number (null ));console .log (Number (undefined ));console .log (Number (true ));console .log (Number (false ));console .log (Number ("123" ));console .log (Number ("12.3" ));console .log (Number ("+123" ));console .log (Number ("-123" ));console .log (Number (" 123" ));console .log (Number ("" ));console .log (Number (" " ));console .log (Number ("123abc" ));console .log (Number ("123+456" ));console .log (Number ("abc" ));
parseInt()
会试图将其收到的任何输入值(通常是字符串)转成整数类型,如果转换失败就返回NaN。
转换规则:如果第一个非空白字符(空格、换行、tab)是数字或者正负号则开始转换,直到碰到第一个非数字字符停止转换。如果第一个非空白字符不是数字或者正负号,转换失败,结果是NaN.
1 2 3 4 5 6 7 8 9 10 11 12 13 console .log ('-----parseInt------' )console .log (parseInt ("123" ));console .log (parseInt ("+123" ));console .log (parseInt ("-123" ));console .log (parseInt (" 123" ));console .log (parseInt ("12a3" ));console .log (parseInt ("12.3" ));console .log (parseInt ("12 3" ));console .log (parseInt ("true" )); console .log (parseInt (" .123" )); console .log (parseInt ("+-123" ));
parseFloat()
会试图将其收到的任何输入值(通常是字符串)转成浮点数类型,如果转换失败就返回NaN。
1 2 3 4 5 6 console .log ( parseFloat (" 2.5a" ) );console .log ( parseFloat (" .56" ) ); console .log ( parseFloat (" -.23" )); console .log ( parseFloat (" +.23 + .1" ) );console .log ( parseFloat (" 3.14.956" ) ); console .log ( parseFloat ("a3.14" ) );
String 其它基本类型转换成String类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 var str0 = "titan" + null ;console .log (typeof str0); console .log (str0); var str1 = "jun" + undefined ;console .log (typeof str1); console .log (str1); var str2 = true .toString (); console .log (typeof str2);console .log (str2);console .log (false .toString ());var num = 10 ;var str3 = num.toString ();console .log (typeof str3);console .log (str3);
Boolean()
其它基本类型转换成Boolean
类型
绝大部分值在转换为布尔类型时都为true
,但以下6中falsy
值除外
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 console .log (Boolean ("" ));console .log (Boolean (null ));console .log (Boolean (undefined ));console .log (Boolean (0 ));console .log (Boolean (NaN ));console .log (Boolean (false ));