如有错误,请指出!!!
1.实参列表arguments
function sum(a,b,c,d) {
// 实参列表arguments
// sum.length 形参长度
if(sum.length>arguments.length){
console.log('形参多了');
}
else if (sum.length<arguments.length){
console.log('实参多了');
}
else console.log('相等');
}
2.不定参求和
function sum() {
var result=1;
for(var i=0;i<arguments.length;i++){
result+= arguments[i];
}
console.log(result);
}
3.转换为数字类型
function MyNumber(num) {
return +num;
}
var n=MyNumber('123');
console.log(typeof (n)+" "+n);
4.递归求阶乘
function jc(n) {
if(n==1||n==0){
return 1;
}
return n*jc(n-1);
}
5.立即执行函数
//立即执行函数 执行一次后 销毁
//只有表达式才能被执行符号执行
var num=(function add(a,b,c) {
var d=a+b+c;
return d;
}(1,2,3));
6.闭包问题
function test() {
var arr=[];
for(var i=0;i<10;i++){
//输出10个10
/*arr[i]=function () {
document.write(i+" ");
}*/
//立即执行函数解决方法 输出0-9
(function (j) {
arr[j]=function () {
document.write(j+" ")
}
}(i));
}
return arr;//产生闭包
}
var myArr=test();
for(var j=0;j<10;j++){
myArr[j]();
}
7.数组对象
var Mr={//定义Mr对象
//属性-->属性名:属性值
name:"xiaoming",
age:18,
health:100,
//方法/函数
exercise:function () {
console.log("I am exercise!")
Mr.health++;//等同于this.health++;
return Mr.health;
},
drink:function () {
console.log("I am drinking!")
Mr.health--;//等同于this.health--;
return Mr.health;
}
}
Mr.sex="man";//添加数据
Mr.age=20;//修改属性
delete Mr.age;//删除属性
8.对象的创建方法
1.var obj={} 2.构造函数 隐式的生成this={} 返回 return this; 1)系统自带的构造函数 new Object() 2)自定义 函数名首字母大写
function Person(name,height) {
//var this={};
this.name=name;
this.height=height;
this.say=function () {
console.log(this.say);
}
//return this;
}
var p=new Person('xiaoming',180);
console.log(p.name);
console.log(p.height);
9.
var arr=[1,2,3,4];
arr.length=2;//截断
console.log(arr);//输出[1,2]
var str="abcd";
str.length=2;
console.log(str);//输出abcd
10.继承 圣杯模式
Father.prototype.lastName="gai";
function Father() {
}
function Son() {
}
function inherit(Target,Origin) {
function F() {};
F.prototype=Origin.prototype;
Target.prototype=new F();
Target.prototype.constructor=Target;
Target.prototype.uber=Origin.prototype;
}
inherit(Son,Father);
var son=new Son();
var father=new Father();
11.0-100随机数
for(var i=0;i<10;i++)
{
var num;
num=Math.random().toFixed(2)*100;//0-100随机数 toFixed保留n位小数 js精度不准会产生误差 如:0.14*100=14.00000000000002
//解决方法 先乘100再取整
var num1=Math.floor(Math.random()*100);
console.log(num1);
}
12.命名空间
name="abc"
var init=(function () {
var name=123;
function Name() {
console.log(name);
}
return function () {
Name();
}
}())
13.连续调用
var MR={
eat:function () {
console.log('Eating');
return this;
},
run:function () {
console.log('Running');
return this;
},
study:function () {
console.log('Studying');
return this;
}
}
MR.eat().run().study();
14.对象枚举
for in 循环遍历对象 通过对象属性个数 控制循环圈数 属性名放在prop里
控制台输入 '属性名' in obj 可判断对象obj能否访问到的属性名
var obj={
name:"132",
age:18,
sex:"boy",
height:180,
weight:70,
__proto__:{//原型里的属性
lastname:"wang"
}
}
for(var prop in obj)//var 属性名 in 对象名 prop字符串类型
{
//console.log(prop);//输出属性名
if(obj.hasOwnProperty(prop)){//判断是否是对象的属性
console.log(obj[prop]);//不能写成obj.prop obj.prop-->obj['prop']找不到prop属性 会输出undefined
}
}
15.克隆
var obj={
name:'abc',
age:12
}
var obj1={}
function clone(origin,target) {
var target=target||{};
for(var prop in obj){
target[prop]=origin[prop];
}
return target;
}
clone(obj,obj1);
16.深度克隆
var obj={
name:'abc',
age:12,
card:['1','2'],
obj2:{
name:"sad",
age:23
}
}
var obj1={}
function deepClone(origin,target) {
var target=target||{},
toStr=Object.prototype.toString,
arrStr="[object Array]";
for(var prop in obj){
if(origin.hasOwnProperty(prop))//判断是否是原型里的属性
{
if(origin[prop]!=="null"&&typeof (origin[prop])=='object'){
//判断是数组还是对象
if(toStr.call(origin[prop])==arrStr)//数组
{
target[prop]=[];
}else{
target[prop]={};
}
deepClone(origin[prop],target[prop]);
}
else
target[prop]=origin[prop];
}
}
return target;
}
17.数组去重
var arr=[1,2,1,2,1,1,2];
Array.prototype.unique=function () {
var len=this.length,obj={},arr=[]/*去重后的数组*/;
for(var i=0;i<len;i++){
if(!obj[this[i]]){
obj[this[i]]="abc";//随意一个字符串 占位
arr.push(this[i]);
}
}
return arr;
}