JavaScript高级程序设计学习


1.等于与不全等的区别

1.1、等于(==):比较两个值是否相等,如果两个值类型不一致,会做强制转换;
1.2、全等(===):比较两个值是否相等,但是不会对值得类型做转换。
      55 == "55"         //返回true,字符串“55”会被转换成数值55;
      55 === "55"       //返回false,不会做类型转换;
     
 建议:不等于、不全等情况类似。等于、不等于会涉及到数据类型转换,会破坏数据类型的完整性,建议使用全等、不全等。

2、利用逻辑或来给变量复制
            给变量复制的时候,通常为避免给变量赋值为null或undefined,通常这样做
var  a = b || c;
      逻辑或操作有如下定义:当两个操作数都不是布尔值时,如果第一个操作数是对象,则返回第一个值,如果第一个操作数求值结果返回false,则返回第二个操作数;则返回undefined。如果b为null或者undefined时,转换成Boolean值后为false,此时输出c,如果c 也是undefined或者null,则输出对应的值。

 3、js 没有代码块作用域的概念
          如下代码:输出结果为10,因为js没有代码块作用域的概念,所以i 不管定义在if块里还是for块里,代码块外都能访问。
if(true){
    for (var i = 0; i < 10; i++) {
    //doSomeThing
    }
}

alert(i)       //10<span style="font-size:14px;">        </span>

   4、数组比较函数sort()

       数组自带的sort方法,会按升序排列数组元素大小,但是经常会出现排列结果与预想的不一致。例如
var arr = [0 ,1 ,5, 10 ,15 ]
      调用sort方法之后,返回的排序结果是:0, 1, 10, 15, 5 ,显然这个与我们预期的不一致。这是因为,sort方法在排序时,会调用每个数组项的toString()方法,然后比较对应的字符串。虽然数值5在数值10前边,但是转换成字符串之后,“10”则位于“5”前边(注:如果两个字符串进行对比,则比较两个字符串对应的字符的编码值)。
      解决方案:sort()可以接受一个比较函数作为参数,该函数的第一个的参数如果位于第二个参数之后则返回1,相等的话返货0,小于的话返回-1。
 function compare(value1,value2){
     if(value1 < value2){
          return -1;
     } else if (value1 > value2 ){
          return 1;
     } else {
          return 0;
     }
}
     重新调用sort()方法:
arr.sort(compare);
alert(arr)  ;          // 0,1,5,10,15
    当然,也可以实现降序排列,只要讲compare函数中的逻辑变为相反; 对于数值型数值,也可以简单写成如下方式:
function compare(value1,value2){
     return value1- value2 ;     // 降序 return value2- value1 ;
}
        :这里的compare函数会返回 -1, 0,1 ,确定排序策略 ,这些值传入到sort方法内部,由sort根据排序策略确定如何排序。

5,数组实现队列、栈、反队列的
 判断某一个对象是不是数组常用的方法是: 
 if(a instanceof  Array) {
            // doSomeThing
     }
   数组模拟队列、栈的执行过程,用到以下四种方法,其中:
 队列:队列的数据结构访问顺序是先进先出(FIFO),可以类比于火车过隧道;
 栈 :栈的数据结构访问顺序是先进后出,或者说后进先出,可以类比于子弹夹装弹。
         对应的数组有四个方法:
 push :向数组尾部添加元素,并返回数组长度;
 pop:从数组尾部删除元素,并减少数组长度,返回删除的元素;
 shift:从数组首部删除元素,并减少数组长度,返回被删除的元素;
 unshift:向数组首部添加元素,并返回最新的长度。

     //利用push和pop方法,可以实现类似栈的行为:
var colors = [red,blue,green];
var length = colors.push("black");      //4
var item = colors.pop();
alert(item);                                  //black

     //利用shift,push可以是模拟队列的行为:
var colors = [red,blue,green];
var length = colors.push("black");      //4
var item = colors.shift();
alert(item);                                  //red

     //利用unshift,pop可以模拟相反方向的队列;
var colors = [red,blue,green];
var length = colors.unshfit("black");      //4
var item = colors.pop();
alert(item);                                  //green

6,数组的迭代算法

      迭代算法
every():对数组中的每一项运行给定函数 ,如果数组中的每一项运行结果都是true,则返回true;
some():对数组中每一项运行给定函数 ,只要有一项运行结果为true,则返回true;
filter():过滤函数,对数组中的每一项执行给定函数,返回执行true的元素,重新组成新的数组;
map();对数组中的每一项执行给定函数,返回执行结果组成的数组;
forEach();对数组中的每一项执行给定函数,么有返回值;

var arr = [1,2,3,4,6,5,8,9];
var everyResult = arr.every(function(item, index ,array ){
     return item > 2;
}); 

// everyResult = false

var someResult = arr.some(function(item, index ,array ){
     return item > 2;
});

// everyResult = true


var filterResult = arr.filter(function(item, index ,array ){
     return item > 2;
});

// filterResult = [3,4,6,5,8,9 ]

var mapResult = arr.map(function(item, index ,array ){
     return item * 2;
});

// mapResult = [2,4,6,8,12,10,16,18  ]

arr.forEach (function(item, index ,array ){
     // dosomething ,么有返回值
});
:这里应该还有jquery的each方法也是数组的常用方法。

7、js 的函数function
     
        在js中函数其实是对象,每个函数其实是Function的实例。因此函数名可以理解为指向函数的对象。函数定义常用的有两种, 
   
      //方法一
       function  sum (a, b){
              return a + b;
        }
      //方法二
       var sum = function (a, b){
              return a + b;
        }

两种方式定义,第一种称为函数声明,第二种称为函数表达式,二者的区别:js引擎在执行代码是,会首先读取函数声明,并将它添加到执行环境中,使其在任何地方都可以使用;而函数表达式只有在程序运行在所在的代码行时,才会被真正的运行。如下所示;
   sum(10,20)
   function  sum (a, b){
              return a + b;
   }<span style="font-size:14px;"> 
</span>

   可以运行,结果为30;
<span style="font-size:12px;">sum(10,20);
  var sum = function (a, b){
              return a + b;
   }</span>
 程序会报错,这是因为在执行到函数所在的语句之前,sum不会保存任何对函数的引用,在执行第一句时会报错 “ sum is not a function”







猜你喜欢

转载自blog.csdn.net/zcs425171513/article/details/52292135