undefined :是一个特殊的值,值类型
var message;
var isUnderfinder = message == undefined;
alert(isUnderfinder);//true
alert(typeof message);//undefined
Null:代表不存在,值类型
var car = null;
alert(typeof car);//object
if(car != null){
// 对car对象执行操作
}
// undefined 值派生自null
alert(null == undefined);// true
// null 和 undefinde,无论何时都没有必要显式的设置变量undefined,但是null需要显式赋值
// 只要意在保存对象,还没有真正保存的时候将其设置为null,体现null座位空指针
后面介绍三个特殊的引用类型Boolean,Number,String,包装类型,注意区别值类型的三个
boolean
// true false
var message = Boolean("str");//true
var message = Boolean("");//false
number
// NaN
isNaN();
// 数值转化
var num = Number("hello");// nan
num = Number("");// 0
num = Number("000111");// 111
num = Number(true);// 1
num = parseInt("111");// 111
// 转化为int 第一个参数数值,第二个参数进制
num = parseInt("10",2);// 2
num = parseInt("10",8);// 8
num = parseInt("10",10);// 10
num = parseInt("10",16);// 16
// 转化为float
num = parseFloat("0.145");// 0.145
string
var string = "string";
// length
string.length;// 6
// +
var lang = string+" add";// string add
// 数值,对象,布尔,字符串都有个toString 的方法
var num = 10;
num.toString();// "10"
num.toString(2);// "1010"
num.toString(8);// "12"
num.toString(10);// "10"
num.toString(16);// "a"
// 转型函数
var value = 10;
alert(String(value)); // "10"
alert(String(null)); // "null"
alert(String(undefined)); // "undefined"
object
// 对象类型
var o = new Object();
// 对象所拥有的属性
Constructor:保存用于创建当前对象的函数,此处存的就是Object();
// 对象所拥有的方法
hasOwnProperty(propertyName);//检查对象是否拥有属性
isPrototytypeof(object);//对象是否是另一个对象原型
propertyIsEnumerable(propertyName);//检查属性能否用for in枚举
toLocaleString();//
toString();//
valueOf();//
Function
// 声明方式一
function sum(num1,num2){
return num1 + num2;
}
var sum = function(num1,num2){
return num1 + num2;
}
// 声明方式二(不推荐)
var sum = new Function("num1","num2","return num1+num2");
// 使用
function sum(num1,num2){
return num1 + num2;
}
sum(10,10);//20
var an = sum;
an(10,10);//20
sum = null;
an(10,10);//20
// 函数是指类型非引用类型
// 没有重载
function addSomeNumber(num){
return 100+sum;
}
function addSomeNumber(num){
return 200+sum;
}
addSomeNumber(100);//300
//等价上面代码
var addSomeNumber = function(num){
return sum+100;
}
addSomeNumber = function(num){
return sum+200;
}
addSomeNumber(100);//300
// 函数声明
sum(10,10);// 完全可以运行,
function sum(num1,num2){
return num1+num2;
}
// 下面无法运行
sum(10,10);
var sum = function (num1,num2){
return num1+num2;
}
// 原因是函数位于初始化语句中,而不是函数声明
// 函数做为值
function call(someFunction, num){
return someFunction(num);
}
var addSomeNumber = function(num){
return sum+100;
}
var result = call(addSomeNumber,100);
result;//200
// 函数可以作为返回值
function compare(propertyName){
return function(object1,object2){
return object1[propertyName]>object2[propertyName]
}
}
// using
var peoples = [{name:"people1",age:23},{name:"people2",age:24}];
peoples.sort(compare("age"));
// 函数属性
// arguments.callee
function factorial(num){
if(num<=1){
return 1;
}
return num*factorial(num-1);
}
// 当函数名称改变时,num*factorial(num-1);也必须变,为了消除这个强耦合
function factorial(num){
if(num<=1){
return 1;
}
return num* arguments.callee(num-1);
}
// this 饮用的是函数执行的环境对象
window.color = "red";
var blue = {color:"red"};
function sayColor(){
alert(this.color);
}
sayColor();// red
blue.sayColor = sayColor;
blue.sayColor(); //blue
// caller
function outer(){
inner();
}
function inner(){
alert(inner.caller);
}
outer();// 会显示outer函数的源代码
// 可以结合 arguments.callee使用,重写为
function inner(){
alert(arguments.callee.caller);
}
// 注意caller 属性只读的,手动赋值导致错误
// length表示函数期望接受的参数个数
// prototype 保存所有实例方法的实际所在
// 函数的方法每个函数都包含两个非继承来的方法
// apply()
// call()
// 上面2函数的作用都是在特定的作用域内调用函数,实际等于设置函数体内this对象的值
// apple 参数2个,一个是作用域,一个是参数数组(可以是数组,亦可argument)
function sum(num1,num2){
return sum1+sum2;
}
function callsum1(num1,num2){
return sum.apply(this,argument);
}
function callsum2(num1,num2){
return sum.apply(this,[num1, num2]);
}
callsum1(10,10);// 20
callsum2(10,10);// 20
// call和apply一样,只是参数需要一一列举出
function callsum(num1,num2){
return sum.call(this, num1, num2);
}
callsum(10,10);// 20
// apply call的作用主要是扩充函数的作用域
window.color = "red";
var o = {color:"blue"};
function sayColor(){
alert(this.color);
}
sayColor.call(this);//red
sayColor.call(window);//red
sayColor.call(o);//blue
// 函数的bind()方法
// 此方法会创建一个函数实例,this值会绑定传给bind()函数的值
window.color = "red";
var o = {color:"blue"};
function sayColor(){
alert(this.color);
}
var objectSayColor = sayColor.bind(o);
objectSayColor();//blue
Array
var color = new Array("red","blue");
color[2] = "black";
alert(color[2]);
// 数组的属性和方法
color.length;
Array.isArray(color);
color.toString();//"red,blue,black"
color.valueOf();//"red,blue,black"
color;//"red,blue,black"
// 转换方法(label语法使用)
var person1 = {
toLocaleString:function(){
return "nikolaos";
}
toString:function(){
return "nicholas";
}
};
var person2 = {
toLocaleString:function(){
return "ccc";
}
toString:function(){
return "Greg";
}
};
var peoples = [person1,person2];
peoples; // nicholas, Greg
peoples.toString; // nicholas, Greg
peoples.toLocaleString; //nikolaos, ccc
// 数组栈操作
// 入:push(从最上面入,即最后面),unshift(从最下面入,即最前面 ) 返回长度
// 出:pop(最上面即最后一个) shift(最下面即第一个) 返回所在位置的元素
var color = new Array("blue");
var count = color.push("red","yellow");// 3
var c = color.pop();//yellow
var first = color.shift();//blue
color.length; //2
// 数组排序
reverse();// 反转数组顺序
function compare (value1,value2){
if(value1 < value2){
return -1;
}
return 1;
}
sore(compare);//参数是fun
// 操作方法
// concat() 数组拼接,不会改变原数组
var colors = ["red","green","blue"];
var colors2 = colors.concat("yellow",["black","brown"]);// red, green, blue, yellow, black, brown
// slice() 数组裁剪,不会改变原数组
var colors = ["red","green","blue","yellow","black","brown"];
var colors2 = colors.slice(1);// green,blue,yellow,black,brown 从位置1开始
var colors3 = colors.slice(1,4);// green,blue,yellow 从位置1开始到位置4结束,不包括位置4
// splice 删除,插入,替换 ,会改变原数组
var colors = ["red","green","blue"];
var removed = colors.splice(0,1);
colors;// green,blue
removed;// red
removed = colors.splice(1,0,"yellow","orange");//从位置1开始插入2项
colors;// green, yellow,orange,blue
removed;// 空数组
removed = colors.splice(1,1,"red","purple");//插入2项删除1项
colors;// green, red, purple,orange,blue
removed;// yellow
// 位置方法
// indexOf 从数组开头找
// lastIndexOf 从数组末尾找
// 迭代方法 以下方法都不改变数组,参数都是function
// every(); 数组每一项运行指定函数,都为true,返回true (&&)
// filter(); 数组每一项运行指定函数,返回返回true的元素组成的数组,筛选符合要求的项组成的数组
// forEach();数组每一项运行指定函数,无返回值
// map();数组每一项运行指定函数,返回返回结果组成的数组
// some();数组每一项运行指定函数,只要任一个返回结果是true则返回true (||)
// 缩小方法 参数都是function (前一个值,当前值,项的索引,数组)
// reduce() 从数组第一项开始,往后遍历
// reduceRight() 从数组最后一项开始,往前遍历
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev,cur,index,arr){
return pre + cur;
});// 此函数的返回值座位第一个参数传递给下一项
sum;// 15
// join("|");
// 把 arrayObject 的每个元素转换为字符串,然后把这些字符串连接起来,返回一个string
date
// 1970.1.1
var now = new Date();
// 2个构造函数
Date.parse();// 参数是表示日期的字符串,返回相应日起的毫秒数,若不能被识别返回nan
//eg:
var someDate = new Date(Date.parse("May 25 , 2004"));
var someDate = new Date("May 25 , 2004");// 与上面等价
Date.UTC(); //参数是年月日时分秒毫秒,返回相应日起的毫秒数
// eg:
var y2k = new Date(Date.UTC(2000,0));// 2000年1月1日午夜零时
var all = new Date(Date.UTC(2005,4,5,17,55,55));// 2005年5月5日下午5:55:55
// 继承的方法
// 一起他引用类型一样date也重写了to string和value of to localestring 方法
// 日期格式化
toDateString()
toTimeString()
toLocaleDateString()
toLocaleTimeString()
toUTCString()
// 组件化方法如下图所示
9243219F-FFDF-417D-A97F-4F149CF003EE.png
D6E752EC-9FD5-46F2-94FA-240F7E72ABA3.png
RegExp(正则)
// g:表示全局,被应用于整个字符串,而非发现第一个立即停止 i:不区分大小写 m:表示多行模式
var pattern = /at/g;//匹配所有at实例
var pattern = /[bc]at/i;// 第一个bat或cat,不区分大小写
var pattern = /.at/gi;//以at结尾的三个字符的组合,不区分大小写
// 元字符必须转义([{\^$\)?*+.]})
// RegExp属性如下图:
2507A112-16E3-48E1-86A0-16933ED02E83.png
// 实例方法如下图:
0A34AE18-6438-4F19-A567-C801D57D7AA7.png
974330FB-4196-451D-B4DD-3D1E5CA7D51D.png
2B1BC3B2-8A01-451F-8C52-B8C18D775D7C.png
// 构造函数如下图:
8300D2AF-C329-45DF-B931-ABFD05E50A9D.png
0D562DA3-1E1A-42CC-B70C-5D0482D13420.png
三个特殊的引用类型Boolean,Number,String
String
var s1 = "some text";
var s2 = s1.substring(2);
// 可以把上面代码想象成如下三步
var s1 = new String("some text");
var s2 = s1.substring(2);
s1 = null;
// 那么
var s1 = "some text";
s1.color = "red";
alert(s1.color);//undefined
// 原因是第二行创建的string对象在执行第三行代码的前就被销毁了,第三行代码创建了一个新的实例,此实例无color属性
// 转型函数和构造函数
var value = "25";
var number = Number(value);//转型
alert(typeof number);//number
var obj = new Number(value);//构造
alert(typeof number);//object
Boolean
var falseObject = new Boolean(false);
var result = falseObject && true;//true
var falseValue = false;
var result = falseValue && true;//false
Number
var numberObj = new Number(10);
var num = 10;
// 对象方法
var num = 10;
num.toFixed(2);// 10.00
num.toExponential(1);//1.0e+1
var num = 10.005;
num.toFixed(2);// 10.01
var num = 99;
num.toPrecision(1);//1e+2 一位数无法表示99故四舍五入了
num.toPrecision(2);//99
num.toPrecision(3);//99.0
String
var stringObject = new String("hello word");
var stringValue = "hello word";
stringValue.length;// 11
stringValue.charAt(1);//e
stringValue.charCodeAt(1);//101
stringValue[1];//e
var stringValue = "hello ";
var result = stringValue.concat("word");//hello word
var result = stringValue.concat("word","!");//hello word!
stringValue;//hello
var stringValue = "hello world";
stringValue.slice(3);//lo world
stringValue.substring(3);//lo world
stringValue.substr(3);//lo world
stringValue.slice(3,7);//lo w
stringValue.substring(3,7);//lo w
stringValue.substr(3,7);//lo worl
// 参数为负数时, 实际值 = 长度+(负数)
stringValue.slice(-3);//rld == stringValue.slice(8);
var stringValue = "hello world";
stringValue.indexof("o");//4
stringValue.lastIndexof("o");//7
stringValue.indexof("o",6);//7 从位置6开始往后检索
stringValue.lastIndexof("o",6);//4 从位置6开始往前检索
// trim 去除首尾空
var stringValue = " hello world ";
var trimstringValue = stringValue.trim();//"hello world"
stringValue;//" hello world "
// 大小写
// toLowerCase(),toUpperCase(); 通用
// toLocaleLowerCase(),toLocaleUpperCase(); 针对地区
// 正则匹配
var text = "cat , bat ,sat , fat";
var pattern = /.at/;
var matches = text.match(pattern);//返回数组
matches.index;//0
matches[0];//cat
pattern.lastindex;//0
//search()
var text = "cat , bat ,sat , fat";
var pos = text.search(/at/);// 1
//replace()
var text = "cat , bat ,sat , fat";
var result = text.replace("at","ond");//cond , bat , sat , fat
result = text.replace(/at/g,"ond");////cond , bond , sond , fond
// 更精细的使用见下图
31197A58-AF3C-4668-AA82-CF6A7E0B3126.png
2044AF11-6B5A-4732-9191-9BC2D8DFFAD8.png
// 比较2字符串 localecompare
var str = String.fromCharCode(104,101,108,108,111);//hello
// html 相关见下图
2B0254DA-55F8-43EE-AE33-DA22187D448D.png