1. 基本包装类型
1)为了便于操作基本类型值,ECMAScript提供了3个特殊的引用类Boolean, Number, String
每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型对象,从而可以使我们调用一些方法操作这些数据。
var s = "briup"; s.substring(2);
后台会自动完成以下操作:
a.创建String类型的一个实例
b.在实例上调用指定的方法
c.销毁这个实例
2)基本包装类型的实例调用typeof返回"object",从而所有基本包装类型对象都会被转换为布尔类型的true.
Object构造函数会像工厂方法一些,根据传入的值的类型返回相应基本包装类型的实例
var obj = new Object("briup"); //obj 类型为String包装类型 console.log(obj instanceof String);
使用new调用基本包装类型的构造函数,与直接调用同名的转换函数不一样
var s = "11"; var s1 = Number(s); //转型函数 number类型 var s2 = new Number(s); //构造函数 object类型
3) Boolean,Number,不建议直接使用这两种类型
4) String
1.常见函数和属性
length
属性,获取字符串的字符数量
charAt(i)
返回给定位置的字符 i为索引
charCodeAt()
返回给定位置的字符的字符编码
var s = "helloworld"; s.charAt(1); //e s.charCodeAt(1); //101
concat() 不改变原字符串
将一个或多个字符串拼接起来,返回拼接得到的新字符串,但是大多使用"+"拼接
slice() 截取 都不改变字符串
(开始位置,返回字符后一个字符位置)
substr()
(开始位置,返回字符个数)
substring()
(开始位置,返回字符后一个字符位置)
var s = "helloworld"; s.slice(3,7); //lowo s.substr(3,7); //loworld s.substring(3,7);//lowo s //helloworld 不改变原值大小
indexOf(); 参数为字符串中的字符 无参数返回-1
从前往后查找指定字符所在位置
lastIndexOf(); 无参数返回-1
从后往前查找字符串所在位置,可以有第二个参数,代表从字符串中哪个位置开始查找。
trim(); 修剪
删除前置以及后置中的所有空格,返回结果
var s = " hello world "; console.log("|"+s.trim()+"|"); //|hello world|
toLowerCase() :转换为小写
toUpperCase() :转换为大写
2.Javascript中String对正则表达式的支持
search()
参数为一个正则表达式。如果参数不为正则表达式,则先通过RegExp将其转换为构造函数。不支持全局检索,返回第一个与之匹配的子串的位置,如果找不到匹配的子串,返回-1。
"javascript".search(/script/i); //返回4
replace()
用以执行检索和替换操作。第一个参数是正则表达式,第二个参数是要替换的字符串。
text.replace(/javascript/gi,"javascript"); //不区分大小写将所有javascript转换为javascript
match()
最常用的正则表达式方法,参数为正则表达式。返回由匹配结果组成的数组。
当正则表达式中没有g修饰符的时候,就不是全局匹配。这时,数组的第一个元素就为匹配的字符串,剩余的元素则是由正则表达式中用圆括号括起来的子表达式。如果该正则表达式设置为修饰符g,则该方法返回的数组包含字符串中所有匹配结果。
"1 plus 2 equals 3".match(/\d+/g) //返回["1","2","3"] var url = /(\w+):\/\/([\w.]+)\/(\S*)/; var text = "visit my blog at https://www.briup.com/~ee"; var result = text.match(url); if(result!=null){ var fullurl = result[0]; var protocol = result[1]; var host = result[2]; var path = result[3]; } split()
参数可以为正则表达式
"1, 2, 3, 4, 5".split(/\s*,\s*/); //["1","2","3","4","5"] 允许分隔符左右两边留有空白
//匹配前后带有0个或多个空格的,逗号
2. Math对象
1)常用方法
1.比较方法
Math.min() 求一组数中的最小值
Math.max() 求一组数中的最大值
Math.min(1,2,19,8,6); //1
2.将小数值舍入为整数的几个方法:
Math.ceil() 向上舍入
Math.floor() 向下舍入
Math.round() 四舍五入
console.log(Math.ceil(12.41)); //13
console.log(Math.floor(12.41)); //12
console.log(Math.round(12.3)); //12
console.log(Math.round(12.5)); //13
3.随机数
Math.random() 返回大于0小于1的一个随机数
2)其他方法:(了解即可,即用即查)
abs(num) 返回num绝对值
exp(num) 返回Math.E的num次幂
log(num) 返回num的自然对数
pow(num,power) 返回num的power次幂
sqrt(num) 返回num的平方根
scos(x) 返回x的反余弦值
asin(x) 返回x的反正弦值
atan(x) 返回x的反正切值
atan2(y,x) 返回y/x的反正切值
cos(x) 返回x的余弦值
sin(x) 返回x的正弦值
tan(x) 返回x的正切值
3. Date函数
var now = new Date(); 获取当前日期对象
now对象->Date.prototype->Object.prototype
将一个字符串转换为Date对象的写法:
var str = "2012-12-12";
var date = new Date(str); //字符串转换为Date对象
document.write(date.getFullYear()); //然后就可以使用Date对象的方法输出年份了
Date.getDate()
返回是日期对象中月份中的几号。
var date = new Date(); //2012-12-19
document.write(date.getDate()); //返回 19 是19号
Date.getDay()
返回日期中的星期几 星期天0-星期6
var date = new Date();
document.write(date.getDay()); //3 星期3
Date.getFulYead()
返回年份 如2012。
var date = new Date();
document.write(date.getFullYear()); //返回2012,2012年
Date.getHours()
返回日期中的小时,几点了,0-23
var date = new Date();
document.write(date.getHours()); //返回23,晚上11点
Date.getMilliseconds()
返回日期中的毫秒数
var date = new Date();
document.write(date.getMilliseconds()); //返回27 当前是xx年,xx月,xx点,xx分,xx秒,xx毫秒的毫秒
Date.getMinutes()
返回日期中的分钟数 0-59
var date = new Date();
document.write(date.getMinutes()); //2012-12-19 23:22 返回22,12点22分
Date.getMonth()
返回日期中的月份数,返回值0(1月)-11(12月)
var date = new Date();
document.write(date.getMonth()); //2012-12-19 此处返回11,注意此处与通常理解有些偏差,1月份返回是0,12月返回是11
Date.getSeconds()
返回一个日期的描述
var date = new Date();
document.write(date.getSeconds());·//返回34,2012-12-19 23:27:34 27分34秒
Date.getTime()
将一个日期对象以毫秒形式返回
var date = new Date();
document.write(date.getTime()); //返回1355930928466 返回值是1970-01-01 午夜到当前时间的毫秒数。
Date.getTimezoneOffset()
GMT时间与本地时间差,用分钟表示
var date = new Date();
document.write(date.getTimezoneOffset()); //返回-480 实际上这个函数获取的是javascript运行于哪个时区。单位是分钟。
Date.getUTCDate()
返回Date对象中的日期值,(全球时间)
var date = new Date();
document.write(date.getUTCDate()); //返回19 19号
Date.getUTCDay()
返回Date对象中的星期几,(全球时间)
var date = new Date();
document.write(date.getUTCDay()); //返回3 星期3
Date.getUTCFullYear()
返回Date中的年份,4位,如2012,(全球时间)
var date = new Date();
document.write(date.getUTCFullYear()); //返回2012
Date.getUTCHours()
返回Date对象中的小时数,就是现在是几点,终于有一个跟getHours()不同了,应该是时差关系,返回的是全球时间里的。
var date = new Date();
document.write(date.getUTCHours()); //现在北京时间是2012-12-19 23:44,但是返回的是15,也就是全球时间中的小时数。
Date.getUTCMilliserconds()
返回Date对象中的毫秒数,(全球时间)
var date = new Date();
document.write(date.getMilliseconds()); //返回全球时间中的毫秒数
Date.getUTCMinutes()
返回Date对象中的分钟数,(全球时间)
var date = new Date();
document.write(date.getMinutes()); //2012-12-19 23:49 返回49,注意是全球时间,其实全球时间应该就小时不同而已吧。
Date.getUTCMonth()
返回Date对象中月份值,(全球时间)
var date = new Date();
document.write(date.getMonth()); //2012-12-19 返回11,0(1月份)-11(12月份)
Date.getUTCSeconds()
返回Date对象中的秒数值
var date = new Date();
document.write(date.getSeconds()); //返回秒数值 返回33
Date.getYear()
返回Date对象中的年份值减去1900
var date = new Date();
document.write(date.getYear()); //2012-12-19 返回112 (2012-1900)
Date.now()
静态方法 //返回1970-01-01午夜到现在的时间间隔,用毫秒表述
document.write(Date.now()); //静态方法,返回当前时间与1970-01-01的时间间隔,毫秒单位。
Date.parse()
解析一个日期时间字符串,返回1970-01-01午夜到给定日期之间的毫秒数
var date = "2012-12-19";
document.write(Date.parse(date)); //返回 1355875200000
var da = new Date(date);
document.write("
" + da.getFullYear() + "-" + da.getMonth() + "-" + da.getDate()); //输出2012-11-19 //注意月份是从0-11
Date.setDate()
设置一个Date对象中的日期值,返回值用调整后的日期的毫秒表示
var date = new Date();
document.write(date.setDate(11));
var da = new Date(date);
document.write("
" + da.getFullYear() + "-" + da.getMonth() + "-" + da.getDate()); //输出2012-11-11 //注意月份是从0-11,设置的时候要注意
Date.setFullYear()
设置一个Date对象中的年份,返回值用调整后的日期的毫秒表示。
var date = new Date(); 今天是2012-12-20
document.write(date.setFullYear(1989)); //返回630167981030
var da = new Date(date);
document.write("
" + da.getFullYear() + "-" + da.getMonth() + "-" + da.getDate()); //输出1989-11-20
Date.setHours() /
设置一个Date对象中的小事数,返回值用调整后的日期的毫秒表示。
var date = new Date(); //现在是2012-12-52 22:52
document.write(date.setHours(5)); //返回1355954000882
var da = new Date(date);
document.write("
" + da.getHours()); //输出05
Date.setMilliseconds()
设置一个日期的毫秒数
var date = new Date(); //现在是2012-12-20
document.write(date.setMilliseconds(22)); //返回1356015393022 注意最后两位,无论如何刷新都是22
Date.setMinutes()
设置一个日期的分钟数
var date = new Date(); //现在是2012-12-52 22:52
document.write(date.setMinutes(1)); //返回1356012067105
var da = new Date(date);
document.write("
" + da.getMinutes()); //输出1
Date.setMonth()
设置一个日期的月份数
var date = new Date(); //现在是2012-12-20
document.write(date.setMonth(2)); //返回1332255597722
var da = new Date(date);
document.write("
" + da.getMonth()); //输出2
Date.setSeconds()
设置一个日期的描述
语法:
date.setSeconds(seconds)
date.setSeconds(seconds,millis)
var date = new Date(); //现在是2012-12-20
document.write(date.setSeconds(3)); //返回1356015783872
var da = new Date(date);
document.write("
" + da.getSeconds()); //输出3
Date.setTime()
使用毫秒数设置一个时间
var date = new Date(); //现在是2012-12-20
document.write(date.setTime(1356015783872)); //返回1356015783872
var da = new Date(date);
document.write("
" + da.getDate()); //输出20
Date.setUTCDate()
设置一个Date对象中对应月的日期值,就是几号(全球时间)
语法:
date.setUTCDate(day-of-month)
var date = new Date(); //现在是2012-12-20
document.write(date.setUTCDate(12)); //返回1355324952003
var da = new Date(date);
document.write("
" + da.getDate()); //输出12
Date.setUTCFullYear()
设置一个Date对象中对应的年份,全球时间
语法:
date.setUTCFullYear(year)
date.setUTCFullYear(year,month)
date.setUTCFullYear(year,month,day)
var date = new Date();
document.write(date.setUTCFullYear(1999));
var da = new Date(date);
document.write("
" + da.getFullYear()); //输出1999
Date.setUTCHours()
设置一个Date对象中对应的小时数,(全球时间)
语法:
date.setUTCHours(hours)
date.setUTCHours(hours,minutes)
date.setUTCHours(hours,minutes,seconds)
date.setUTCHours(hours,minutes,seconds,millis)
var date = new Date();
document.write(date.setUTCHours(05));
var da = new Date(date);
document.write("
" + da.getUTCHours());
Date.setUTCMilliseconds()
设置一个Date对象中对应的毫秒数,(全球时间)
var date = new Date();
document.write(date.setMilliseconds(05)); //注意此处无论如何刷新都是05结尾
Date.setUTCMinutes()
设置一个Date对象的分钟、秒钟、以及毫秒值。
语法:
date.setUTCMinutes(minutes)
date.setUTCMinutes(minutes,seconds)
date.setUTCMinutes(minutes,seconds,millis)
var date = new Date(); //现在是2012-12-20
document.write(date.setUTCMinutes(25)); //返回1356017146549
var da = new Date(date);
document.write("
" + da.getUTCMinutes()); //输出5
Date.setUTCMonth()
设置一个Date对象的月份值及日期值
var date = new Date(); //现在是2012-12-20
document.write(date.setMonth(01)); //返回1329751527983
var da = new Date(date);
document.write("
" + da.getUTCMonth()); //输出1
Date.setUTCSeconds()
设置一个Date的秒钟及毫秒值
var date = new Date(); //现在是2012-12-20
document.write(date.setUTCSeconds(01)); //返回1356017281976
var da = new Date(date);
document.write("
" + da.getUTCSeconds()); //输出1
Date.setYears()
设置一个Date对象的年份值,如果给的参数在0-99之间,它将会加上1900以便把它当中1900-1999之间的年份处理。如果输入4位数,则把它当成FullYear设置
var date = new Date(); //现在是2012-12-20
document.write(date.setYear(22)); //返回1356017281976
var da = new Date(date);
document.write("
" + da.getFullYear()); //输出1922
var date = new Date(); //现在是2012-12-20
document.write(date.setYear(2011)); //返回1324395113386
var da = new Date(date);
document.write("
" + da.getFullYear()); //输出2011
Date.toDateString()
以字符串的形式返回一个Date的日期部分
var date = new Date();
document.write(date.toDateString("yyyy-MM-dd"));
Date.toTimeString()
以字符串的形式返回一个Date的时间部分
var date = new Date();
document.write(date.toTimeString("yyyy-MM-dd"));
Date.toISOString()
将一个Date对象转换为ISO-8601格式的字符串,返回的字符串格式为yyyy-mm-ddThh:mm:ssZ
var date = new Date();
document.write(date.toISOString());
Date.toJSON
//JSON序列化一个对象
var date = new Date();
document.write(date.toJSON());
Date.toLocaleDateString()
以本地格式的字符串返回一个Date的日期部分,返回一个本地人可读的日期格式,日期部分
var date = new Date();
document.write(date.toLocaleDateString());
Date.toLocaleString()
将一个Date转化难为一个本地格式的字符串
var date = new Date();
document.write(date.toLocaleString());
Date.toLocaleTimeString()
将一个Date转化为本地的格式的时间部分
var date = new Date();
document.write(date.toLocaleTimeString());
Date.toString()
将一个Date转换为一个字符串
var date = new Date(); //现在是2012-12-22
document.write(date.toString());//返回Sat Dec 22 2012 19:59:17 GMT+0800
Date.toTimeString()
以字符串的形式返回一个Date对象的时间部分
var date = new Date();
document.write(date.toString());
Date.toUTCString()
将一个Date对象转换为字符串(全球时间)
var date = new Date();
document.write(date.toUTCString());
Date.UTC()
将一个Date对象转换毫秒的形式 静态方法
语法:Date.UTC(year,month,day,hours,minutes,seconds,ms)
document.write(Date.UTC(2011, 11, 11, 11, 11, 11));
Date.valueOf()
如果是一个Date对象,将一个Date对象转为毫秒的形式,否则不显示
var date = "";
document.write(date.valueOf()); //不是Date对象,不输出
var date1 = new Date();
document.write(date1.valueOf()); //输出1356180400916
*****************************Note***************************************************
1.数组中的迭代方法
arr.forEach(回调函数,回调函数this的值);
var arr = new Array("terry","jacky",true);
var obj = {
a:1,
b:2
}
arr.forEach(function(a,b,c){
a->当前遍历的值
b->当前遍历的值索引
c->当前遍历的数组
},obj);
迭代
arr.some(function(a,b,c){
return (typeof a == "string"); //执行一次 返回false
});
返回值:boolean
只要回调函数可以返回true,some的结果就为true
arr.every(function(a){
return (typeof a == "string"); //执行三次 返回false (第三个不是字符串)
});
返回值:boolean
所有回调函数返回true,every的结果就为true
arr.filter(function(a){
});
过滤,当回调函数返回true,将当前遍历元素a加入到返回值数组中
arr.map(function(a){
return a.age;
});
映射,map返回值为数组,map数组中的元素为回调函数返回值
2.正则表达式
1) 定义方式
构造函数
new RegExp("正则表达式","修饰符");
var pattern = new RegExp("javascript","igm");
正则表达式字面量
/正则表达式/修饰符
var pattern = /javascript/ig;
2) 正则表达式的使用
var pattern = /javascript/ig;
pattern为正则表达式对象
var arr = new Array(1,2,3);
arr -> Array -> Object
pattern -> RegExp -> Object
3) 正则表达式对象
/javascript/ig
pattern.lastIndex
如果有修饰符g修饰,lastIndex维护上一次检索的结束位置,如果没有g修饰,lastIndex维护0
pattern.ignorecase
pattern.global
pattern.multiline
pattern.source 正则表达式文本'/javascript/ig'
pattern.exec();
执行正则表达式匹配
参数:字符串
返回值:
1)类数组对象result
result.index 该字符串出现的起始位置
result.input 检索的字符串
2)数组
正则表达式
1.直接量
/abc/ 检索"abc"
/\n/
/\t/
2.字符类
/[abc]/ 检索"a" "b" "c"
/[0-9]/ 检索0 1 2 3 34 5 6 7 8 9
/[a-zA-Z]/
\w words /[a-zA-Z0-9_]/
\W Words /[^a-zA-Z0-9]/
\d digit /[0-9]/
\D Digit /[^0-9]/
\s space /[\n\t ]/
\S Space /[^\n\t ]/
3.重复
子表达式{}
{1,4}
{1,}
{1}
? {0,1}
+ {1,}
* {0,}
4.重复方式
贪婪
默认,尽可能多匹配
\w{1,4} 匹配4次,3次,2次,1次
非贪婪
重复? {1,4}?
尽可能少匹配
\w{1,4}? 匹配1次,2次,3次,4次
5.选择
|
/javascript|java/
/java(script)?/
匹配java字符串,java字符串后可以有0个或者多个script字符串
如果用pattern.exec执行,返回结果为类数组对象,第一个元素为整体匹配结果,之后的元素为子表达式结果
/java(script)??/
第一个问号代表(script)出现次数为0~1次
第二个问号代表非贪婪匹配,
6. 位置
开头 ^
多行模式下,表示开头 [^ ] 在方扩号里面表示非
结束 $
多行模式下,表示结尾
/^[^\d]{3}\d+abc$/igm;
第一个上箭头代表以"[^\d]{3}"开头
第二个上箭头代表 非
匹配以非数字的三个字符开头,中间是1~n个数字,以abc结尾的字符串
修饰符
i ignorecase 忽略大小写
g global 全局
m multiline 多行模式
3.包装器函数
为了丰富基本数据类型的功能,在基本数据类型变量调用方法的时候,会自动将该基本数据类型转换为相对应的引用数据类型(包装器函数的对象)
var a = 3; //a number基本数据类型
a.valueOf(); //a Number 引用数据类型 自动装箱
console.log(typeof a); //a number 基本数据类型 自动拆箱
var b = new Number("10");//b Number 引用数据类型
b.valueOf();//b Number 引用数据类型
console.log(typeof b );//object
Number();
Boolean();
String();
var a = 3;
调用方法的时候 a= new Number(a);
a -> Number.prototype ->Object.prototype
调用方式 : new 包装器函数();
4. String
var a = "hello world"
a调用方法的时候 a = new String(a); 调用的方法实际上是String.prototype中的函数
5. 特殊操作符
typeof
typeof a;
判断变量a的类型
instanceof
对象 instanceof 构造函数
判断对象是否是该构造函数的实例 (你是不是由它构造的)
var a = new Number();
a instanceof Number a是Number···
-------面试题--------
1. JS中内置对象/内置函数
Object
Function
Array
RegExp
Date
包装器函数
Number
String
Boolean
2.怎么理解原型对象
1) 原型对象存在于函数对象中,也就是说,每一个函数对应一个原型对象
2) 函数真正的所在是在原型对象中
3) 原型中定义的方法子对象可以调用
function Array(){
}
Array.isArray = function(){
}
Array.prototype = {
push:function(){
}
pop:function(){
}
...
}
var arr = new Array(1,2,3);
arr.push();
arr.pop();
Array.isArray();
3. 怎么理解类数组对象
体现对象的特点
特有的属性
arguments.callee
体现数组的特点
元素,通过索引访问
length 数组的长度/元素的个数
arguments[0];
arguments.length
4. 罗列出String原型中的十个常用方法:
toString
valueOf
length
match
replace
split
search
charAt
charCodeAt
concat
slice
splice
substr
substring
支持正则表达式的方法
str.split(正则表达式)
按照正则表达式规则分割字符串,将分割后的结果保存到一个数组中返回
str.search(正则表达式);
不支持全局检索,返回第一个满足正则表达式规则的字符串的起始位置。
str.replace(正则表达式,替换的字符串)
将满足正则表达式规则的字符串替换为指定要替换的字符串。
当正则表达式为全局检索时候,替换所有符合条件的
当正则表达式为非全局检索时候,替换第一个符合条件的【原值没有改变】
str.match(正则表达式); --不支持全局 匹配
不会维护pattern.lastIndex,不会记住上一次检索的结束位置,不支持二次调用。
当正则表达式为全局检索时候:
返回值为类数组对象
如果正则与分组,第一个元素为全局匹配结果,之后的每个元素为分组匹配结果
当正则表达式为非全局检索时候:
返回值为数组
Math
对象
Math.ceil();
Math.floor();
Math.round();
Math.random();
Math.abs();
Date
函数
var now = new Date();