JS 学习经验

在工作的时候遇到很多js的问题,然后自己就去看了,做了一些笔记,一起发表出来。

js数组学习

js这个东西,真是java不能够比的,感觉入门很容易,但是后面整起来真是不爽,最近在做项目时经常运用到js的数组操作,但这玩意真心玩起来不爽,今天专门花时间来,具体来学习。还是要吐槽js这玩意 真是麻烦

JS的数组可以使用Array(new Array)和[],我经常使用[]来创建数组。

数组遍历

循环.forEach() 方法用来循环遍历数组,说IE7和IE8不支持,哎,那玩意就是恼火

[1,2,3,4].forEach(function(value,index,array){
 console.log(value); 
})

value 是遍历出来的值,index是遍历的序号,array就是这个数组

satisfied = [10, 12, 10, 8, 5, 23].some(function (value, index, array) {
   console.log(value);
   return value=10
})


console.log(satisfied);
// <- true
console.log("-------------");

satisfied = [10, 12, 10, 8, 5, 23].every(function (value, index, array) {
   console.log(value);
   return value==10
})
console.log(satisfied);

输出的结果

10
true
-------------
10
12
false
[Finished in 0.3s]

some 方法当回调函数返回的是true的时候就将返回,如果一直不能够返回true就讲一直执行到数组结束

every方法相反,是当返回的false时结束循环

这种的遍历的效率 说是比较低,但是我并没有验证
for( r in t){
    console.log(t[r]);
}
in 也可以用于遍历数组 但是这里的r 只是表示数组的序号

数组的串行化

var b=['qw','we','er','rt'];
var bb = b.join(",");

var b2 = b.toString()

bb b2输出

qw,we,er,rt

用”,”分隔然后组成新的字符串 join()还可以指定分隔符,组成的新的字符串

数组元素添加

var b=['qw','we','er','rt'];
b.push('re')//在数组结尾添加元素 返回新数组的长度
b.unshift('re')在元素开头添加元素 返回新数组的长度

b.splice(1,0,'ew')//这表示在第一位(0开始)添加'we' 这里的第二个参数,表示删除几位,如果这里第二个参数是1表示将第一位删除后将ew 添加 整个数组长度不变。如果是2 表示将第一位后的两个删除,然后添加ew

数组的截取和合并

arrayObj.slice(start, [end]); //以数组的形式返回数组的一部分,注意不包括 end 对应的元素,如果省略 end 将复制 start 之后的所有元素

arrayObj.concat('reeee'); //将多个数组(也可以是字符串,或者是数组和字符串的混合)连接为一个数组,返回连接好的新的数组

数组元素的排序

arrayObj.reverse(); //反转元素(最前的排到最后、最后的排到最前),返回数组地址

arrayObj.sort(); //对数组元素排序,返回数组地址

JavaScript一些基础学习

有关闭包

闭包我感觉自己没有那么多理论,我的理解就是函数里面有属性,有操作的方法,就应该算闭包 还是代码来的直观

var generateClosure = function() {
var count = 0;
var get = function() {
count ++;
return count;
};
return get;
};

var counter = generateClosure();
var counter2 = generateClosure();
console.log(counter()); // 输出 1
console.log(counter()); // 输出 2
console.log(counter()); // 输出 3
console.log(counter2());//输出1

一、闭包时,返回的函数不光只有函数,还包括定义函数的环境(就是函数中的变量等),函数中的变量会跟着环境变化而变化,他不会随着函数定义的返回而消释。
二、当一个函数,产生两个闭包实例的时候,两个实例相互独立。不会相互影响(他们的函数环境,相互独立,不相互影响)

js原型(prototype)

还是直接上代码吧


function Foo() {
}
Object.prototype.name = 'My Object';
Foo.prototype.name = 'Bar';
var obj = new Object();
var foo = new Foo();
console.log(obj.name); // 输出 My Object
console.log(foo.name); // 输出 Bar
console.log(foo.__proto__.name); // 输出 Bar
console.log(foo.__proto__.__proto__.name); // 输出 My Object
console.log(foo. __proto__.constructor.prototype.name); // 输出 Bar

js属性特征

Object.defineProperty(o,'x',{
    value:1,
    writable:true,
    enumerable:false,
    configurable:true
});

console.log(Object.getOwnPropertyDescriptor(o,'x'));

js 属性4个特征分别是值(value),可写行(writable),可枚举性(enumerable:false)可配置型(configurable)

writable:false时不能够设置value的值。

enumerable:false是不能够用for in 遍历出他的key

configurable不可配置型,false 就不能够配置上面的属性

用defineProperty(object,fild,{})来配置属性

getOwnPropertyDescriptor(object,fild)开获取属性描述

JS高级写法学习

! function te(){
    console.log("reee");
}()

上面的写法表示 当js脚本解释器解释到这个位置的时候就要执行该function

function te(){
     this.t='t--->';
     this.tt= function(re){
        console.log(this.t+re);
    }
    var ttt='';
}
te.prototype.tr = function() {
    console.log(this.t);
};

var th = new te();
th.tt('ewww');

只有通过this定义的属性才能够访问 其中的ttt只能够在te构造函数中访问,不能够通过prototype访问,这样就形成了私有变量

JSON 做参数

function five(son){
        var t = 'this is color '+son.color+' for '+son.persone;
        son.success(t)
    }

five({
    color:'red',
    persone:'tangc',
    success:function(t){
        console.log(t);
    }

})//输出this is color red for tangc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值