公司服务器坏了,无聊按面向对象的方法分析下javascript的空值和假值

首先要知道javascript的自动转换,就是该处需要什么类型,那么javascript会自动把目前类型传入该需要类型的构造函数,来生成需要类型
猜想1:undefined在javascript里是一个类估计(不继承object),null是object对象的一个子类,用面向对象的方法看待的话是这样
只有0和空字符串等于false;undefined和null对象并不等于false对象,而null和undefined是相等的
这个怎么理解呢?
       猜想2: 在你使用undefined对象和其他object对象进行互动的时候,他会先把自己转变成object对象(Object(undefined);),将返回null
<script>
  alert(typeof(Object(undefined)) === ‘object‘);
      alert(typeof undefined === ‘object‘);   
alert(String(Object(null)===null));

alert(String(Object(undefined)===null));//Object object
 
</script>
将返回true和false,false,false
这个猜想貌似错误了,Object构造函数知识不足(可能就没有带参数的构造方法)String构造函数知识不足,无法理解返回值
虽然空值不能调用toString方法,但是却可以使用String构造函数进行构造。像decodeURI这样的函数,如果传入的是undefined或者null,返回的是“undefined”和“null”字符串。这点很容易用错。
alert(String(undefined));  //"undefined"
alert(String(null)); //null
这个估计只是是构造函数里的特殊判断,无意义

假值和空值有一个共性,那就是在作为if的条件分支时,均被视为false;应用“!”操作之后得到的均为true
Boolean构造函数的特殊定义,无意义,无法验证是先转换object对象还是直接就是的defined对象传入,一个简单的验证法被提出,去研究
 arguments对象是否为object,新的理论被提出,关于typeof()(仅仅返回一个string..)无法验证继承属性
<script>
  alert(typeof(false) === ‘object‘); //false
alert(typeof(0) === ‘object‘); //false
</script>

总猜想错误,全部错误,重新收集知识:
undefined对象是引擎根据一定条件和判断后,把引用指向过去的,然后其他的类再进行一些catch ex的操作,估计实现方法是这样的
在 ECMAScript 中,不能访问对象的物理表示,只能访问对象的引用。每次创建对象,存储在变量中的都是该对象的引用,而不是对象本身。

只能用 === 运算来测试某个值是否是未定义的,因为 == 运算符认为 undefined 值等价于 null。

注释:null 表示无值,而 undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。

一种面向对象语言需要向开发者提供四种基本能力:

  1. 封装 - 把相关的信息(无论数据或方法)存储在对象中的能力
  2. 聚集 - 把一个对象存储在另一个对象内的能力
  3. 继承 - 由另一个类(或多个类)得来类的属性和方法的能力  //这个太假了,顶层属性并不继承object的,object对象的重新理解,只是javascript为了面向对象而加入的一种设计模式
  4. 多态 - 编写能以多种方法运行的函数或方法的能力

ECMAScript 支持这些要求,因此可被是看做面向对象的。


绑定(early binding)是指在实例化对象之前定义它的属性和方法,这样编译器或解释程序就能够提前转换机器代码。在 Java 和
Visual Basic 这样的语言中,有了早绑定,就可以在开发环境中使用
IntelliSense(即给开发者提供对象中属性和方法列表的功能)。ECMAScript 不是强类型语言,所以不支持早绑定。
另一方面,
晚绑定(late
binding)指的是编译器或解释程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法即可。
ECMAScript 中的所有变量都采用晚绑定方法。这样就允许执行大量的对象操作,而无任何惩罚。
简单来说javascript顶层元素封装成了8大类,而之间并无继承关系.那么就会为了比如toString写8次..
那么这些判断的实现和转换无非就是各种构造方法中的特定判断而已..

在 ECMAScript 中,等号由双等号(==)表示,当且仅当两个运算数相等时,它返回 true。非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回 true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。

执行类型转换的规则如下:

  • 如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
  • 如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
  • 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
  • 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。

在比较时,该运算符还遵守下列规则:

  • 值 null 和 undefined 相等。
  • 在检查相等性时,不能把 null 和 undefined 转换成其他值。
  • 如果某个运算数是 NaN,等号将返回 false,非等号将返回 true。
  • 如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等。 //很好直接说了
时间: 2024-10-08 09:04:41

公司服务器坏了,无聊按面向对象的方法分析下javascript的空值和假值的相关文章

ssh对VPN可以登录,公司IP不能登陆,求高手看到帮忙分析下

具体情况如下: 1.一个安全组共3台机器,而且都没有开软防火墙,亚马逊防火墙分别对一个VPNIP和公司IP全开 ,之前三台服务器都可以vpn和公司IP登陆,现在是其中一台只能拨vpn才能登陆:在用公司IP时,远程端口不通的 以排除原因:1.软件防火墙问题: 2.selinux和iptables 都是关闭的 3.密码错误问题 4.sshd已启动 5.单位出口IP固定

使用公司自己的maven服务器时,本地 maven 的配置方法

使用公司的maven服务器,可以加速jar包的下载. 如果要使用公司的maven服务器,需要对本地maven配置文件conf/settings.xml做相应修改,具体改法有两种. 一.mirror 方式 思路是利用 mirror 配置支持通配符号,于是可以指定所有的 repository 都去找公司的repository,如果有某些 repository 是公司没有的,就需要显示做排除. 这种方法明显的缺点就是要排除所有公司仓库中没有的repository. 具体配置如下 <mirrors>

工程师入侵公司服务器 窃取企业用户通讯录被公诉

为了炫耀自己的计算机技术,网络工程师孙某利用北京某通信有限公司计算机系统存在的网络漏洞,入侵该公司的服务器,窃取其企业用户通讯录16000余组.日前,孙某因涉嫌非法获取计算机信息系统数据罪被昌平检察院提起公诉. 意外发现网络漏洞 孙某毕业于北京某大学的计算机科学与技术专业,是安全测试工程师.因为孙某所在公司是北京某通信有限公司的用户,作为公司网络安全工程师的孙某经常会同该公司发生业务往来,时间长了,孙某发现该通信公司的网络系统存在漏洞.出于好奇,同时也是为了考验自己的"业务水平",孙某

公司服务器备份

服务器备份简单定义 所谓服务器备份是指针对于服务器所产生的数据信息进行相应的存储备份过程,从而保障数据的安全运行.公司服务器的备份应对当前和将来的信息使用方式进行评估,实施满足其全部需求的流程和技术. 公司服务器备份简单来说就是为了保证数据不丢失,在灾难来临能及时恢复数据并保证企业业务得以继续开展.备份是容灾的基础,当系统出现操作失误或系统故障.人为错误操作.病毒攻击.黑客攻击以及自然灾害导致数据丢失,而将备份的全部或部分数据进行恢复. 公司服务器传统备份方法 一.内置或外置的磁带机进行冷备份;

一、面向对象技术概论(下)

1.2 面向对象的核心概念 从理论上说,面向对象技术拥有四大基本特性. (1)封装 这是一种隐藏信息的特征.拿上节引例来说,类CalculateDate将数据结构与算法隐藏在类的内部,外界使用者无需知道具体技术实现细节即可使用此类.封装这一特性不仅大大提高了代码的易用性,而且还使得类的开发者可以方便的更换新的算法,这种变化不会影响使用类的外部代码.可以用以下公式展示类的封装特性: 封装的类=数据+对此数据所进行的操作(即算法) 通俗的说,封装就是:包起外界不必需要知道的东西,只向外界展露可供展示

使用面向对象的方法访问数据库

使用面向对象的方法访问数据库new mysqli("服务器名称","用户名","密码","数据库名称"); 判断连接是否成功1.mysqli_connect_error()2.!mysqli_connect_error() or die("error!"); 执行SQL语句返回结果集对象mysqli_query()函数执行某个针对数据库的查询:执行select查询时,返回一个mysqli_result对象:

JAVA面向对象思想理解分析

1.面向对象是面向过程而言.两者都是一种思想.面向过程:强调的是功能行为.(强调过程.动作)面向对象:将功能封装进对象,强调了具备了功能的对象.(强调对象.事物)面向对象是基于面向过程的.将复杂的事情变简单了.面向过程-->面向对象:执行者-->指挥者将过程.功能封装进对象里面.面向对象三大特征:封装.继承.多态.(找对象,建立对象,使用对象,维护对象的关系.)老者境界:(万物皆对象!!!)例:公司招聘程序员:为了提高效率,公司老板从面向过程到面向对象(执行者-->指挥者)例:去饭店吃饭

CMM模型,结构化开发方法和面向对象开发方法的比较,UML(统一建模语言),jackson开发方法

CMM模型 一.CMM简介 CMM,英文全称为Capability Maturity Model for Software,即:软件成熟度模型. CMM的核心是把软件开发视为一个过程.它是对于软件在定义.实施.度量.控制和改善其软件过程的实践中各个发展阶段的描述. 根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化.标准化,使企业能够更好地实现商业目标. 分级:一级为初始级,二级为可重复级,三级为已定义级,四级为已管理级,五级为优化级. 优点: 1.提高软件开发的管理能力,因为CM

结构化开发方法和面向对象开发方法的比较

1. 两者基本思想的比较 1.1结构化方法的基本思想 结构化方法是一种传统的软件开发方法,它是由结构化分析.结构化设计和结构化程序设计三部分有机组合而成的.结构化设计方法是以自顶向下,逐步求精,模块化为基点,以模块化,抽象,逐层分解求精,信息隐蔽化局部化和保持模块独立为准则的设计软件的数据架构和模块架构的方法学.它的要点是是把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内. 结构化方法的基本思想主要体现在三个方面. (