JS对象的定义:
属性名在以下情况要添加单引号:
- 如果属性名是JS中的保留字之一,如break ,case
- 包括任何除字母、数字、下划线及美元符号以外的字符
- 如果属性以数字开头的话
用[]定义数组的方法我们称之为数组文本标识法,用大括号{}定义对象的方法叫做对象文本标识法
var hero = { //hero表示变量名,数组以[],对象以{}
one: 'This is one',
two: 2,
'3': '3' //不加单引号是不合法的
};
hero.one; //读取普通属性
"This is one"
hero["3"] //读取特殊属性的方法,使用 hero.3 报错
"3"
Array()是一个用来构建数组的内建构造器函数。
常用的var a = [] 实际上就是 var a = new Array();
我们也可以使用Array()构造器创建新数组时,给赋值,如var a = new Array(1,2,3,4) 不过注意如果传递的是一个单独的数字,构造器会认为这是数组的长度。如new Array(3) 会认为数组的长度是3。
数组的特别之处,一是数组的属性名从0开始,二是数组有length属性用来记录数组的长度。
var a = new Array();
undefined
a.b = 2; //这样是允许的,length会忽略非数字键名属性
2
a.length;
0
a.length = 4; //可以通过手动设置length属性,调整数组的长度,如果设置长度大于原来长度自动
//创建空元素代替,如果长度小于原来长度多出的那部分元素将会被移除
数组的方法:
- push()方法会在数组的末端添加一个新元素,返回改变后数组长度
- pop()方法将数组最后一个元素移除,返回移除的元素
- sort()方法则是用于给数组排序的,返回排序后的数组
- join()方法返回将数组中的所有元素用逗号(可以指定)连接而成的字符串
- slice(x,s)在
- 不修改数组的情况下返回其中的某个片段 如从索引为x的元素开始,返回s个元素
- splice(x,s,n)于slice一样,不过会把返回的片段从数组中删除,并把n元素插入到删除的地方
prototype属性
当函数是一个对象构造时,可以通过修改该函数的prototype属性让引用另一个对象,达到访问另一个对象属性的目地。
var a = {
name : 'xiaohong',
age : 12
};
undefined
function f(){
this.sex = 'nv';
};
undefined
f.prototype = a; //以后以构造器f生成的对象就可以访问a对象的属性
Object { name: "xiaohong", age: 12 }
var f1 = new f();
undefined
f1.name;
"xiaohong"
f1.sex;
"nv"
toString()在自定义方法上会得到方法的源码,而内建函数使用toString()只能得到[native code]。可以通过这一点区分本地方法和自定义方法。
call()与apply()
它们触发函数,并指定相关的调用参数。
var some_obj = {
name: 'Ninja',
say: function(who){
return 'Haya '+who+',I am a '+this.name;
}
}
var my_obj = {name:'Scription guru'};
undefined
some_obj.say.call(my_obj,'Dude');//当say被调用时this自动设置成了my_boj对象的引用。
"Haya Dude,I am a Scription guru"
some_obj.say.apply(my_obj,['Dude']);//当say被调用时this自动设置成了my_boj对象的引用。
"Haya Dude,I am a Scription guru"
String对象的一些方法(以下方法会产生一个新字符串,不会修改原字符串):
我们将一个基本字符串当做对象来使用时,后台就会相应的创建String对象,在调用完之后又把String对象给销毁。
- toUpperCase() 将字符串的字符转换为大写
- toLowerCase()将字符串的字符转换为小写
- charAt()返回指定位置的字符,如果传递给charAt()的位置并不存在,返回一个空字符串
- indexOf()实现字符串的内部搜索,返回第一次匹配到字符串的位置 ‘asdf'.indexOf('s') => 1 从0开始。搜索不到返回-1
- lastIndexOf() 从末端开始搜索 搜索不到返回-1
- slice(m,n), subString(m,n)返回m元素到n元素之间的元素,包含本身。区别在于对每每个参数为负时处理方法不同。slice处理为str.length-1, subString处理为0
var s = "Couch potato"; undefined s.slice(3,-1); "ch potat" s.substring(3,-1); "Cou"
7、split()方法可以根据我们所传递的分割字符串,将目标字符串分割成一个数组。是join的反操作
- concat()方法通过用于合并字符串 'adf'.concat('fff') => adffff 与+区别是+会修改原字符串
Math
Math只是一个包含 一系列方法和属性,用于数学计算的全局内建对象。
Math的属性:
Math.PI //数字常数pi
3.141592653589793
Math.SQRT2; //2的平方根
1.4142135623730951
Math.E; //欧拉常数E
2.718281828459045
Math.LN2; //2的自然对数
0.6931471805599453
Math.LN10; //10的自然对数
2.302585092994046
Math的方法:
Math.random(); //生成一个0-1之间的随机数 获取某max和min之间的值,可以通过一个公式((max-min)*Math.random()) + min来实现
0.09992417033894196
Math.floor(4.5); //返回左侧最接近的整数
4
Math.ceil(4.5); //返回右侧最接近的整数
5
Math.round(4.5); //四舍五入返回整数
5
Math.max(2,3);
3
Math.min(2,3);
2
Math.pow(2,8); //2的8次方
256
Math.sqrt(9); //9的平方根
3
Date()是用于创建Date对象的构造器函数
注意溢出式:如 3月32会表示成4月1
new Date(); //以当前日期创建
Date Sun Jun 23 2019 10:20:13 GMT+0800 (China Standard Time)
new Date('2015 11 12'); //根据输入的字符串创建日期
Date Thu Nov 12 2015 00:00:00 GMT+0800 (China Standard Time)
new Date(1357027200000);//根据timestamp创建日期
Date Tue Jan 01 2013 16:00:00 GMT+0800 (China Standard Time)
Date的方法:
Date.getXxx()
Date.setXxx() //获取对应的时间如年 月日
Date.now() //返回当前timestamp
var a = new Date(Date.now());
undefined
a.getDay(); //查看日期是星期几,因为从周日开始用0表示
0
RegExp正则表达式
提供了一种强大的文本搜索和处理方式。
var re = new RegExp('j.*t'); //查询以j开始,t结束的字符串。.代表任意字符,*代表0个或多个
var re2 = /j.*t/;
RegExp的属性:用来设置RegExp搜索的规则
- global: 默认为false,相关搜索在找到第一个匹配时就会停止,如果需要找出所有匹配项,将其设置成true
- ignoreCase: 设置大小写相关性,默认为false
- multiline:设置跨行搜索,默认为false
- lastIndex: 搜索开始的索引位,默认值是0
- source: 用于存储正则表达式匹配模式
除了lastIndex,其余属性在对象创建之后就不可以修改。需要设置global,ignoreCase,multiline只要将它们传递给构造器,对应就会设置成true
var re = new RegExp('j.*t','gmi');
undefined
var re2 = /j.*t/gim;
RegExp对象的方法:两种可用于查找匹配内容的方法
- test()返回的是一个boolean值
- exec() 返回的则是一个由匹配到的字符串组成的数组。
var re = new RegExp('j.*t'); undefined re.test('jssst'); true re.exec('jssst'); Array [ "jssst" ]
以正则表达式为参数的字符串方法:
- match()方法,返回的是一个包含匹配内容的数组
- search()返回匹配字符串的索引位置
- replace()可以将相关的匹配文本替换成某些其他字符串,并返回,不修改原本字符串
- split() 根据指定的分割字符串将我们的输入字符串分割成一个数组。
-
var s = new String('HelloJavaScriptWorld'); undefined s.match(/a/); Array [ "a" ] s.match(/a/g); //g表示开启全部匹配 Array [ "a", "a" ] s.search(/a/); 6 s.replace(/[A-Z]/g,''); //将字符串s中的所有大写字母替换成'' "elloavacriptorld" s.replace(/[A-Z]/g,'_$&'); //$&表示被匹配到的字符串 "_Hello_Java_Script_World" s.replace(/([A-Z])/g,"_$1"); //如果正则表达式中分子组(即带括号),那么可以用$1表示第一组 "_Hello_Java_Script_World" //回调式替换。把查找的字符放入函数进行逻辑处理后在替换 function fun(w){ return '_'+w.toLowerCase(); } undefined s.replace(/[A-Z]/g,fun); //每次查找到的匹配项,都要放入fun进行处理 "_hello_java_script_world" s.split(/[o]/); //以字符o分隔,\s表示空格,如以空格分隔 s.split(/\s*/); Array(3) [ "Hell", "JavaScriptW", "rld" ] var csv = 'one, two,there ,four'; undefined csv.split(/\s*,\s*/); Array(4) [ "one", "two", "there", "four" ]
wef
抛出异常:
throw new Error('异常信息');
throw{ //可以定义异常名
name: '异常名',
message:'异常信息'
}