文档章节

JavaScript知识点升华

 蜗牛奔跑
发布于 2015/06/19 10:14
字数 1540
阅读 5
收藏 0

1. JavaScript中 = = =

首先,== equality 等同,=== identity 恒等。  ==, 两边值类型不同的时候,要先进行类型转换,再比较。  ===,不做类型转换,类型不同的一定不等。

下面,分别说明:  先说 ===,这个比较简单。下面的规则用来判断两个值是否===相等: 

  • 如果类型不同,就[不相等] 

  • 如果两个都是数值,并且是同一个值,那么[相等]; (例外的是,如果其中至少一个是NaN,那么[不相等]。判断一个值是否是NaN,只能用isNaN()来判断)  

  • 如果两个都是字符串,每个位置的字符都一样,那么[相等];否则[不相等]。

  • 如果两个值都是true,或者都是false,那么[相等]。

  • 如果两个值都引用同一个对象或函数,那么[相等];否则[不相等]。

  • 如果两个值都是null,或者都是undefined,那么[相等]。

再说 ==,根据以下规则: 

  • 如果两个值类型相同,进行 === 比较。 

  • 如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较: 

    a、如果一个是null、一个是undefined,那么[相等]。 

    b、如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。 

    c、如果任一值是 true,把它转换成 1 再比较;如果任一值是 false,把它转换成 0 再比较。 

    d、如果一个是对象,另一个是数值或字符串,把对象转换成基础类型的值再比较。对象转换成基础类型,利用它的toString或者valueOf方法。js核心内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。非js核心的对象。 

    e、任何其他组合,都[不相等]。 

    举例: 
    "1" == true 
     类型不等,true会先转换成数值 1,现在变成 "1" == 1,再把"1"转换成 1,比较 1 == 1, 相等。 
    
    = 赋值运算符 
    == 等于 
    === 严格等于 
    例: 
    var a = 3; 
    var b = "3"; 
    
    a==b 返回 true a===b 返回 false 因为a,b的类型不一样 
    ===用来进行严格的比较判断

2. JavaScript中NaN

NaN “Not a Number”。出现这个数值比较少见,以至于我们可以不理它。当运算无法返回正确的数值时,就会返回“NaN”值。NaN 值非常特殊,因为它“不是数字”,所以任何数跟它都不相等,甚至 NaN 本身也不等于 NaN 。isNaN()计算一个参数,检查它是否为数值。

语法
isNaN(testValue) 
参数

testValue :    你想要测试的值。

如果把不是数字的变量强制转换为数字也会报这个,例如:parseInt("非数字字符串")。

3. JavaScript的数据类型都有什么?

基本数据类型5:String,boolean,Number,Undefined, Null

应用数据类型1:Object(Array,Date,RegExp,Function)

4. JavaScript中的typeof运算符

typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。它返回值是一个字符串,该字符串说明运算数的类型。

你 知道下面typeof运算的结果吗?typeof(1);typeof(NaN);typeof(Number.MIN_VALUE);typeof(Infinity);typeof("123");typeof(true);typeof(window);typeof(document);typeof(null);typeof(eval);typeof(Date);typeof(sss);typeof(undefined);

看 看你会几个?

typeof是一个一元运算符,它返回的结果 始终是一个字符串,对不同的操作数,它返回不同的结果。具体的规则如下:

  • 对于数字类型的操作数而言, typeof 返回的值是 number。比如说:typeof(1),返回的值就是number。 上面是举的常规数字,对于非常规的数字类型而言,其结果返回的也是number。比如typeof(NaN),NaN在 JavaScript中代表的是特殊非数字值,虽然它本身是一个数字类型。 在JavaScript中,特殊的数字类型还有几种:

Infinity 表示无穷大特殊值NaN            特殊的非数字值
Number.MAX_VALUE     可表示的最大数字
Number.MIN_VALUE     可表示的最小数字(与零最接近)
Number.NaN         特殊的非数字值
Number.POSITIVE_INFINITY 表示正无穷大的特殊值
Number.NEGATIVE_INFINITY  表 示负无穷大的特殊值

以上特殊类型,在用typeof进行运算进,其结果都将是number。
  • 对于字符串类型, typeof 返回的值是 string。比如typeof("123")返回的值是string。

  • 对于布尔类型, typeof 返回的值是 boolean 。比如typeof(true)返回的值是boolean。

  • 对于对象、数组、null 返回的值是 object 。比如typeof(window),typeof(document),typeof(null)返回的值都是object。

  • 对于函数类型,返回的值是 function。比如:typeof(eval),typeof(Date)返回的值都是function。

  • 如果运算数是没有定义的(比如说不存在的变量、函数或者undefined),将返回undefined。比如:typeof(sss)、typeof(undefined)都返回undefined。

5. JavaScript中的隐含参数

arguments:arguments 该对象代表正在执行的函数和调用它的函数的参数。[function.]arguments[n]参数。function:选项。当前正在执行的 Function 对象的名字。n:选项。要传递给 Function 对象的从0开始的参数值索引。说明Arguments是进行函数调用时,除了指定的参数外,还另外创建的一个隐藏对象。Arguments是一个类似数组但不是数组的对象,说它类似数组是因为其具有数组一样的访问性质及方式,可以由arguments[n]来访问对应的单个参数的值,并拥有数组长度属性length。还有就是arguments对象存储的是实际传递给函数的参数,而不局限于函数声明所定义的参数列表,而且不能显式创建 arguments对象。arguments对象只有函数开始时才可用。

//arguments 对象的用法function ArgTest(a, b){
   var i, s = "The ArgTest function expected ";   var numargs = arguments.length;	// 获取被传递参数的数值。
   var expargs = ArgTest.length;	  // 获取期望参数的数值。
   if (expargs < 2)     s += expargs + " argument. ";   else     s += expargs + " arguments. ";   if (numargs < 2)     s += numargs + " was passed.";   else     s += numargs + " were passed.";  s += " "
   for (i =0 ; i < numargs; i++){	 // 获取参数内容。  s += "    Arg " + i + " = " + arguments + " ";  }   return(s);					 // 返回参数列表。}

http://www.jb51.net/article/46323.htm

http://www.jb51.net/article/56847.htm


本文转载自:

共有 人打赏支持
粉丝 35
博文 610
码字总数 117758
作品 0
海淀
javascript学习思维导图

JavaScript 数据类型 JavaScript 变量 Javascript 运算符 JavaScript 流程控制 JavaScript 数组 JavaScript 函数基础 JavaScript 字符串函数 JavaScript 正则表达式 DOM 基本操作 Window 对象...

IT智云编程
09/12
0
0
四月前端知识集锦(每月不可错过的文章集锦)

目前自己组建的一个团队正在写一份面试图谱,将会在七月中旬开源。内容十分丰富,第一版会开源前端方面知识和程序员必备知识,后期会逐步写入后端方面知识。因为工程所涉及内容太多(目前已经...

夕阳
05/02
0
0
零基础的网站开发初学者如何系统的学习?

A.学习背景 开始网站开发,起先是从手机网站的UBB语法开始的,也因此有了深入学习的兴趣。为了让学习的热情膨胀,我有意的培养这一爱好 ,定位了自己要成为一名优秀的网站开发员的目标。 作为...

李佳顺
2012/12/25
0
3
JavaScript 学习资源推荐

最近 reddit 有讨论:References for JavaScript Mastery. 去年 Rey Bango 博客上也有一篇文章:What to Read to Get Up to Speed in JavaScript. 下面是我的整理,希望能对你有所帮助。 登堂...

deeper099
2011/09/29
0
1
从零开始学 Web 之 JavaScript(一)JavaScript概述

大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程。此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注。在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间...

fengdaoting
06/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring中static变量不能@value注入的原因

今天本想使用@Value的方式使类中的变量获得yml文件中的配置值,然而一直失败,获得的一直为null。 类似于这样写的。 public class RedisShardedPool { private static ShardedJedisPool pool...

钟然千落
今天
2
0
CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0
Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
3
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
38
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部