文档章节

JavaScript中的一些特殊用法(三)

我是偶哦
 我是偶哦
发布于 2016/06/14 21:44
字数 1377
阅读 51
收藏 3

1. ==和===

在JavaScript中,如果等式两边类型不同,或者仅包含一个对象,那么比较会分为两种情况,转型后比较和不转型直接比较。 ==是先转换在比较,===是不转换直接比较。 对于来说===,只要类型不相等就返回false。 而对于==来说,分为如下几种情况:

  • true会转换为1,false会转换为0。
  • 字符串和数值比较,字符串会转换为数值。
  • 如果等式两边只有一个对象,这个对象会调用valueOf得到基本类型,如无valueOf方法调用toString方法。如果两边都是对象则不转型。
  var p = {
     "name":"a"
  };
  var q = {
      "name":"a"
  }
  var o =p;
  alert(q==p);    //false   p和q指向的对象的地址不同,虽然对象的内容是相同的
  alert(o==p);    //true
  • 下面是特殊的比较情况
  null == undefined   //true
  NaN != NaN          //true
  NaN == NaN          //false
  "NaN"  == NaN       //false
  undefined == 0      //false
  null == 0           //false

2. for-in语句

  • for-in语句输出顺序不可预测,次序可能因为浏览器不同而有所差异。
  • 要迭代的变量未null或undefined时,ECMAScript 5下不再抛出错误而是不执行循环体。如果想向前兼容,则在循环前判断不为null或undefined。

3. swithc语句

  • switch可以使用任何数据类型。
  • case的值可以是常量,变量和表达式。
  • switch语句在比较值时使用的是全等比较操作符(===)。
  var num = 25;
  switch (true) {
    case num<0:
      alert("less 0");
      break;
    case num>=0:
      alert("more than 0");
      break;
    default:
      alert("error");

  }

4. 函数的使用

  • 函数内没有return语句或return不带任何返回值,则函数都会返回undefined。
  • 函数的定义时和函数的调用时参数不比保持一致。换句话说两种参数(形参和实参)并没有任何联系。函数定义时提供的变量只是使用时较为方便,就算不定义也可以获得传递给函数的参数(通过arguments[])。
  function howManyArgs(){
    alert(arguments.length);
  }
  howManyArgs("a");         // 1
  howManyArgs("a","b");     // 2
  howManyArgs();            // 0
  • 形参和arguments[]之间的关系如下,注意严格模式和非严格模式区别。
  function howManyArgs(ss){
    arguments[0]="test";
    arguments[1]="test2"
    alert(arguments[0]);    //test
    alert(arguments[1]);    //test2
    alert(ss);              //test
  }
  howManyArgs("a");
function howManyArgs(ss){
  "use strict"
  arguments[0]="test";
  arguments[1]="test2"
  alert(arguments[0]);      //test
  alert(arguments[1]);      //test2
  alert(ss);                //a
}
howManyArgs("a");

5. 函数参数的使用

在定义函数时,我们会把用到的参数写到函数的括号内,但是在有多个可选参数的情况下就会不够灵活,这个时候可以使用对象封装多个可选参数。

  function displayInfo(args){
    var output = "";
    if (typeof args.name == "string"){
      output += "Name: " + args.name + "\n";
    }
    if(typeof args.age == "number"){
      output += "Age: "args.age + "\n";
    }
    alert(output);
  }
  displayInfo({
    name: "Nicholas",
    age: 29
  });
  displayInfo({
    name: "Greg"
  });

6. 数组长度

  • 数组每一项可以保存任何数据类型(a[0]的类型可以和a[1]的不同)
  • 数组的length属性可变,可以调整length的长度动态的改变数组大小。
  var colors = ["red", "blue", "green"];
  alert(colors.length);     //3
  colors.length = 2;
  alert(colors[2]);         //undefined
  colors.length=5;
  alert(colors[2]);        //undefined colors[2]信息已经丢失

7. 检测数组

if (value instanceof Array)是我们常用来判断一个变量是不是数组类型,但是此代码假定只有一个全局环境。如果网页包含多个框架,就会存在两个版本的Array构造函数,框架之间传递数组判断时会出现问题。我们可以用ECMAScript 5中的Array.isArray(yourValue)方法。

  var arr=new Array();
  alert(typeof(arr));       //object
  alert(arr instanceof Array);   // true
  var iframe = document.createElement('iframe');    
  document.body.appendChild(iframe);    
  xArray = window.frames[1].Array;       
  var arr = new xArray();   
  alert(arr instanceof Array); // false
  alert(arr.constructor === Array); // false
  alert(Array.isArray(arr)) ;       //true

8. 数组的常用方法

  • 栈方法
    • push() 在数组末尾添加一项
    • pop() 从数组末尾弹出一项
  • 队列方法
    • push()
    • shift() 从数组开始弹出一项
  • 反向对列 (数组的前端添加,末尾移除)
    • unshift() 从数组开始添加若干项
    • pop()
  var colors = new Array();
  colors.push("red","green");
  var item = colors.pop();
  alert(item);      // green
  colors.push("green"); // 将弹出的green重新放回
  var item = colors.shift();
  alert(item);      //red
  colors.unshift("red");  //将弹出的red重新放回
  alert(colors)         // red, green
  • sort() sort()方法按升序排列,会调用数组每项的toString()方法,然后比较字符串,即使是数值也转为字符串。
  • slice() 方法返回输入参数到数组结尾的所有项,不会影响原数组,如果两个参数,则返回两个参数间的数组,不包括开始位置。
  • indexOf()/lastIndexOf() 接受要查找的项,和起点索引(可选)两个参数,比较时使用全等操作符(===)。
  • reduce()和reduceRight() 会把数组前一项运行函数的返回值当做下一个数组项的输入值,最后只返回一个结果
  var values = [1,2,3,4,5];
  var sum = values.reduce(function(prev,cur,index,array){
    return prev + cur;
  });
  alert(sum) //1+2+3+4+5=15
  /* 第一次执行回调函数prev是1,cur是2
   * 第二次prev是3,cur是3
   * 第三次prev是6,cur是4
   * 第四次prev是10,cur是5
   * 返回10+5=15
   */

9. 数组的迭代方法

  • every() 对数组中每一项运行一个函数,数组每一项都返回true,则every()返回true。
  • filter() 对数组中每一项运行一个函数,filter()返回数组中所有返回true的项。
  • forEach() 对数组中每一项运行一个函数。
  • map() 对数组中每一项运行一个函数,map()返回数组每一项执行函数的返回值组成的数组。
  • some() 对数组中每一项运行一个函数,只要有一个数组项返回true,则some()返回true。
  var numbers = [1,2,3,4,5,4,3,2,1];

  var everyResult = numbers.every(function(item,index,array){
    return item>2;
  });
  alert(everyResult);   //false

  var filterResult = numbers.filter(function(item,index,array){
    return (item>2);
  });
  alert(filterResult);      //[3,4,5,4,3]

  var mapResult = numbers.map(function(item,index,array){
    return items*2;
  });
  alert(mapResult);   //[2,4,6,8,10,8,6,4,2]

  var someResult = numbers.some(function(item,index,array){
    return item>2;
  });
  alert(someResult);    //true

  numbers.forEach(function(item,index,array){
    alert(item)                                   // 1,2,3,4,5,4,3,2,1
  });

© 著作权归作者所有

共有 人打赏支持
我是偶哦
粉丝 5
博文 32
码字总数 21607
作品 0
深圳
JavaScript基础(二)变量和数据类型

javascript变量和数据类型 一、javascript命名规范 1. 严格区分大小写 2. 变量的命名必须以字母或 或 $开头,余下的部分可以是任意的字母,数字,或者是 或者是$ 3.不能用关键字或者是保留字...

曾杨
2013/12/25
0
0
一行能装逼的JavaScript代码的延伸

前段就是坑,入坑水真深。 先看看一个黑科技, 纳尼,这是什么东西。 贴入浏览器执行一看,你个XX,你给老子等着。。。。。。。 然并卵。 作为一般的青年就此笑过, 可是我不是一般的青年,我...

淡色的云
05/30
0
0
undefined与null的区别

大多数计算机语言,有且仅有一个表示"无"的值,比如,C语言的NULL,Java语言的null,Python语言的none,Ruby语言的nil。 有点奇怪的是,JavaScript语言居然有两个表示"无"的值:undefined和n...

ihaolin
2014/03/30
0
0
JavaScript 的undefine 与 null

参考自网站( http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html ),并稍作整理。 <一> 相似性 在JavaScript 中,将一个变量赋值为 undefined 或 null,几乎没有区别。 在使用上...

平江夜弹
2014/12/31
0
0
提高 web 应用性能之 JavaScript 性能调优

简介: JavaScript 是一个比较完善的前端开发语言,在现今的 web 开发中应用非常广泛,尤其是对 Web 2.0 的应用。随着 Web 2.0 越来越流行的今天,我们会发现:在我们的 web 应用项目中,会有...

风一样
2011/08/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

[雪峰磁针石博客]软件测试专家工具包1web测试

web测试 本章主要涉及功能测试、自动化测试(参考: 软件自动化测试初学者忠告) 、接口测试(参考:10分钟学会API测试)、跨浏览器测试、可访问性测试和可用性测试的测试工具列表。 安全测试工具...

python测试开发人工智能安全
今天
2
0
JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
2
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
0
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0
OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享水木年华的单曲《中学时代》@小小编辑 手机党少年们想听歌,请使劲儿戳(这里) @须臾时光:夏天还在做最后的挣扎,但是晚上...

小小编辑
今天
38
8

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部