1、数据类型
数字 布尔 字符串 undefined null 对象
2、对象
普通对象:命名值的无序集合;
由构造函数初始化的对象组成的集合
特殊对象:1、数组对象(Array)带编号的值的有序集合
2、函数对象(Function)
3、日期对象(Date)
4、正则表达式对象(RegExp)
5、错误类(Error)
3、null和undefined无法拥有方法
4、不在任何函数内声明的变量叫做全局变量
在函数内声明的变量具有函数作用域,并且只在函数内可见
5、数字
常用Math对象的方法
Math.pow(2,10) 2的10次方
Math.round(0.6) 1=>四舍五入
Math.floor(0.6) 0 向下求整
Math.ceil(0.6) 1 向上求整
Math.abs(-1) 1 求绝对值
Math.max(12,4,3) 12 求最大值
Math.min(12,4,3)3 求最小值
Math.random 求大于等于0小于1的伪随机数
6、0/0,无穷大除以无穷大,算术运算符与不是数字或者无法转换为数字的操作数一起使用将返回NaN,它与任何值都不相等,包括自身
isNaN 如果参数是NaN或者是(对象或者字符串(不能隐式转换为数字)),则返回true;判断是否为非数字
IsFinite 在参数不是NaN,Infinity -Infinity的时候返回true 判断是否为有限的数字
7、时间函数
var then=new Date(2015,0,7);
var later=new Date(2015,0,7,15,30,30);
var day=new Date();
var year=day.getFullYear();
var month=day.getMonth();
var date=day.getDate();
var everyDay=day.getDay();
7、字符串函数
var str="hello , world";
str.charAt(0);
str.charAt(str.length-1);
str.substring(1,4);//第2-4个字符
str.slice(1,4);//同上
str.slice(-3);//最后三个字符
str.substr(1,3)//截取3个字符
JavaScript取子串方法slice,substr,substring对比表
slice和substring接收的是起始位置和结束位置(不包括结束位置),而substr接收的则是起始位置和所要返回的字符串长度
三个方法之间的主要区别如下:
- 三个方法的参数1都代表子串开始位置,参数2在slice和substring中表示结束位置,而在substr中代表的则是子串长度;
- 对于负数态度,当出现在参数1的位置时,slice和substr从末尾开始计算,而substring不支持末尾计数法直接视为0;当出现在参数2位置时,slice和substring的处理同参数1:前者从末尾开始计算,后者转换成0,而substr则视负数长度为0返回空串;
- 对于参数1大于参数2的情况,substring最大的不同在于它会交换两个参数再截取子串,substr因第二参数表示的是长度因此并无异常,slice曽依然正常搜寻子串始末位置,若开始位置在结尾后边则返回空串。
- slice可以用于数组,substring不可以
- 根据MDN对substr的描述,在IE下可能并不支持负数从末尾计算的方式。
str.indexOf("1");字母l第一次出现的位置
str.lastIndexOf("l");字母l最后一次出现的位置
str.indexOf("l",3);在位置3及之后首次出现字符l的位置
str.split(",") 用指定的字符把字符串分割成数组
str.replace("h","H");全文字符替换
str.toUpperCase();全部变成大写
str.toLowerCase();
8、在两条斜线之间的文本构成了一个正则表达式直接量,第二条斜线之后跟着一个或者多个字母,用来修饰匹配模式的意义
字符串同样具有可以接收RegExp参数的方法
例如
var text="testing:1,2,3";
var pattern=/d+/g;
pattern.test(text) //true 匹配成功
text.search(pattern) //9:首次匹配成功的位置
text.replace(pattern,"#"); testing: #,#,#
text.split(/D+/);用非数字截取字符串
text.match(pattern);//所以匹配组成的数组
数组复制
function copyArray(a,b){ var length=a.length; for(var i=0;i<length;i++){ b[i]=a[i]; } return b; } var b=[],a=[3,2,1]; copyArray(a,b); console.log(b);
数组比较
function equalArray(a,b){ var length=a.length; if(length!=b.length){ return false; } for(var i=0;i<length;i++){ if(a[i]!=b[i]){ return false; } } return true; } var a=[1,2,3],b=[1,2,3]; console.log(equalArray(a,b));
10、数据转换
注意相等符号==
undefined==null //true
"0"==0 //true
0==false //true
"0"==false //true
undefined==false //false
一些隐式转换
x+"" //String(x)
+x //Number(x) or x-0
!!x //Boolean(x)
数字转换为字符串
Number的toString方法可以接收转换基数的参数,如果不指定参数,则转换规则将基于十进制
var n=17; var twoFormatter=n.toString(2);//10001
var n=123456.789; console.log(n.toFixed(0)); console.log(n.toFixed(2)); console.log(n.toFixed(5)); console.log(n.toExponential(1)); console.log(n.toExponential(3)); console.log(n.toPrecision(4)); console.log(n.toPrecision(7)); console.log(n.toPrecision(10));
toFixed指定小数点的位数
toExponential 转换为指数,其中小数点前只有一位,小数点后面的位数有参数指定
toPrecision 根据指定的有效数字位数转换为字符串,如果有效数字的位数小于整数部分的位数,则转化为指数形式
三个方法都会适当的进行四舍五入或者补充0
字符串转换为数字
Number(字符串) 只能基于十进制转换,并且不能出现非法的尾随字符
parseInt 只能解析整数
parseFloat 可以解析整数和浮点数
parseInt和parseFloat都尽可能跳过前置的空格,并尽可能的解析更多数字字符,并忽略后面的内容
如果第一个非空字符是非法的数字直接量,则返回NaN
console.log(parseInt("12.34")); //12 console.log(parseFloat("12.34"));.//12.34 console.log(parseInt("0.1"));//0 console.log(parseFloat("0.1")); //0.1 console.log(parseInt(".1")); //NaN console.log(parseFloat(".1"));//0.1
parseInt可以接收第二参数,这个参数是指定的转换基数
console.log(parseInt("11",2));//3(1*2+1)
对象转换字符串
[1,2,3] .toString();"1,2,3"
(function f(){ alert("123");}).toString() //"function f(){ alert("123");}"
/d+/g.toString() ///d+/g
new Date(2010,0,1).toString() //Fri Jan 01 2010 00:00:00 GMT+0800 (中国标准时间)
valueOf 一般返回对象本身,但是日期对象返回1970年来的毫秒数
var d=new Date(2010,0,1);
d.valueOf();//1262275200000
特殊场景
对象转换为字符串 如果有toString()方法,如果返回原始值,则转换为字符串返回,如果没有toString方法或者没有返回原始值,如果存在valueOf方法,如果返回原始值,则转换为字符串返回,如果从这两个都无法返回原始值,则抛出错误
对象转换为数值 果存在valueOf方法,如果返回原始值,则转换为数值返回,否则有toString()方法,如果返回原始值,则转换为数值返回,否则则抛出错误
console.log([1]+2);//12
console.log([]+2)//2
console.log([1]==1);//true
console.log([]==0);//true
对于+ == !=和关系运算符都会做对象到原始值的转换,任何对象(除了日期对象),首先是会调用valueOf(),然后调用toString(),然后再转换为原始值,而日期对象则直接转换成相应的原始值,不会再转换