总结c#和javascript中常见的相关的"空"

简介:
一、C#中的null、string.Empty和""
1、null
"null" means the object reference is invalid in .NET。
null关键字是表示不引用任何对象的空引用的文字值,是引用类型变量的默认值。那么也只有引用型的变量可以为NULL,如果 int num=null,的话,是不可以的,因为Int是值类型的。
Code
2、string.Empty和""
这个很好理解,string.Empty就是"",大多数情况下,二者可以互换。
Code
3、三者主要区别
(1)、string.Empty是在String类的静态构造函数中定义的.并且注意,由于CLR的string  interning的作用(传说中的拘留池), string.Empty和""完全指向同一片内存区域,不会每次""都出现一个新的字符串引用(所以 线程lock空字符串的时候是会出大问题的).
Code
(2)、三者的内存分配情况
a、string strTest=null这样定义后,只是定义了一个string 类的引用,strTest并没有指向任何地方,在使用前如果不实例化的话将报错。 
b、string strTest=string.Empty这样定义后,strTest是一个空字符串,空字符串是一个特殊的字符串,只不过这个字符串的值为空,在内存中是有准确的指向的。 string.Empty不分配存储空间
c、string strTest="","" 分配一个长度为空的存储空间   
Code
(3)判定空字符串的几种写法
Code
二、JavaScript中的null,""和undefined
编程世界里只有 数据和代码两种基本元素。javascript中代码只体现为一种形式即function。javascript中数据则可以总结为简单数据和复杂数据两种。其中复杂数据只有一种即object,而简单数据包含null,undefined,boolean,number和string这五种。
下面简要介绍一下简单数据类型:

复制代码
null                          和c#差距很大(引用类型?),可以理解为有那么一个概念,但没有东西。
                              ps:typeof(null)返回object,但null并不是object,
                              具有null值的变量也并非object

undefined                     代表一切未知事物,什么也没有。我们熟知的window对象
                              就有一个undefined属性。可以将undefined赋值给任何变量或属性,
                              但并不意味着消除了改变量,反而会因此多了一个属性。 
                              ps:typeof(undefined)返回undefined

boolean                       true或者false,对就对,错就错,绝对明确,没有疑义
                              
number                        数值类型,线性事物,大小和次序分明,多而不乱,便于代码进行批量处理,
                              也控制代码的迭代和循环等
                              ps:typeof(NaN)和typeof(Infinity)都返回number。NaN参与任何数值计算
                              的结果都是NaN,而且NaN!=NaN. Infinity/Infinity=NaN.

string                        字符串类型,面向人类的理性事物,非常适合人机编程交流,直接高效
复制代码
千万注意,上面的单词都是小写的,不要和javascript内置函数Boolean,Number,String,Object,Function等混淆。 
下面比较一下null,""和undefined的异同点。
1、typeof的结果比较
Code
2、length属性比较
复制代码
function  funcTest()
{
  
var  obj = null ;
  
var  str = "" ;

 
// alert(obj.length); //null没有length属性
  alert(str.length);  // 0
  // alert(undefined.length); //undefined没有length属性
}
复制代码
3、相等比较
(1)“==”
关于相等,要多看几个示例:
a、null,"",0和undefined转为逻辑值的情况
Code
ps:除了false外加上null,0,"", NaN(NaN比较特殊,有个isNaN方法可以直接判断)和undefined之外,其他任何东西(简单类型值,对象或者函数)转换为逻辑值时都是true。最怪的是:
b、null,0,""和undefined各自相等吗?
Code
从运行的结果看,除了null==undefined,""==false和0==false返回值为真之外,其他都不相等。js的灵活可见一斑。
(2)全等("===")
复制代码
function  funcTest()
{
  
var  obj = null ;
  
var  str = "" ;

  alert(obj
=== str);  // false
  alert(obj === undefined);  // false
  alert(str === undefined);  // false
 
}


复制代码
关于相等==讨论到这里本来就可以了,可是考虑到实际开发中的需要,我们额外记录一点经验之谈:
(3)、数字和字符串比较
Code
4、与数值和字符串运算时
复制代码
function  funcTest()
{
 
var  num = 123 ;
 alert(num
+ null );    // 123
 alert(num + undefined);    // NaN
 
 
var  str = " 123 " ;
 alert(str
+ null );    // 123null
 alert(str + undefined);    // 123undefined
 
}
复制代码
可见,与数值运算时,null参与数值运算时其值会自动转换为0,而undefined参与任何数值计算时,其结果一定是NaN;
对于字符串运算,把null和undefined原封不动”连接“就可以了。
5、是否关键字
null是javascript保留关键字,而undefined是有特殊含义的属性,但却不是javascript的保留关键字。
至于说undefined是特殊含义的属性,看代码:
复制代码
function  funcTest()
{
 alert(
' undefined '   in  window);    // true
 alert(undefined  in  window);    // true
  var  obj  =  {};
 alert(
' undefined '   in  obj);     // false
 alert(undefined  in  obj);     // false
}
复制代码
这证明undefined是window对象的属性。
ps:NaN和Infinity是window对象的另外两个特殊属性。这俩特殊属性都不是javascript的保留关键字.
ok,浅显地总结一下。从上面的篇幅中,你看不出它们的本质方面的东西,但是关于“空”这个东东在平时的项目中几乎都会碰到(笔者不止一次两次地碰到过在方法体中null然后ToString()一下,虽然也知道null不能这么干,但是你不能保证他人写好的方法被你调用,null的情况有没有特殊考虑一下),希望能引起你的注意并对你有用。欢迎补充。







本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/archive/2009/06/12/1497796.html,如需转载请自行联系原作者
目录
相关文章
|
8月前
|
开发框架 前端开发 JavaScript
C# 6.0+JavaScript云LIS系统源码  云LIS实验室信息管理新型解决方案
云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序,可协助区域内所有临床实验室相互协调并完成日常检验工作,对区域内的检验数据进行集中管理和共享,通过对质量控制的管理,最终实现区域内检验结果互认。其目标是以医疗服务机构为主体,以医疗资源和检验信息共享为目标,集成共性技术及医疗服务关键技术,建立区域协同检验,最大化利用有限的医疗卫生资源。
179 1
|
8月前
|
JavaScript 前端开发 安全
C#结合JavaScript实现多文件上传
C#结合JavaScript实现多文件上传
|
8月前
|
开发框架 前端开发 JavaScript
C# 结合JavaScript实现手写板签名并上传到服务器
C# 结合JavaScript实现手写板签名并上传到服务器
|
8月前
|
存储 开发框架 前端开发
C#开发的全套成熟的LIS系统源码JavaScript+SQLserver 2012区域云LIS系统源码
医院云LIS系统是一套成熟的实验室信息管理系统,目前已在多家三级级医院应用,并不断更新。云LIS系统是为病人为中心、以业务处理为基础、以提高检验科室管理水平和工作效率为目标,将医学检验、科室管理和财务统计等检验科室/实验室所有工作进行整合,全面改善检验科室/实验室的工作现状。
66 0
|
8月前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
75 0
|
开发框架 前端开发 JavaScript
医院检验信息系统LIS源码,开发语言:C# 6.0、JavaScript
云LIS系统是一种医疗实验室信息管理系统,提供全面的实验室信息管理解决方案。它的主要功能包括样本管理、检测流程管理、报告管理、质量控制、数据分析和仪器管理等。技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
140 0
|
JavaScript 前端开发 API
JavaScript数组API总结
JavaScript数组API总结
JavaScript数组API总结
|
JavaScript 前端开发
JavaScript总结:typeof与instanceof的区别,及Object.prototype.toString()方法
JavaScript总结:typeof与instanceof的区别,及Object.prototype.toString()方法
190 0
JavaScript总结:typeof与instanceof的区别,及Object.prototype.toString()方法
|
JavaScript 前端开发
JavaScript总结:let变量(弥补var的缺陷)
JavaScript总结:let变量(弥补var的缺陷)
145 0
JavaScript总结:let变量(弥补var的缺陷)
|
JavaScript 前端开发
JavaScript总结: javascript中使用var定义变量的变量提升问题
JavaScript总结: javascript中使用var定义变量的变量提升问题
138 0
JavaScript总结: javascript中使用var定义变量的变量提升问题