- 浏览: 1335873 次
- 性别:
- 来自: 湖南澧縣
文章分类
最新评论
-
虾米小尹:
不行啊!2.2-0.25=1.9500000000000002 ...
JavaScript浮点数运算 —— 精度问题 -
heluping000000:
引用String a= "abc",首先在 ...
String,到底创建了多少个对象? -
mack:
谢谢分享matcher.appendReplacement(s ...
string.replaceAll()中的特殊字符($ \)与matcher.appendReplacement -
wzt3309:
完全理解,比网上其他资料都要详细
String,到底创建了多少个对象? -
u014771876:
Java中十六进制转换 Integer.toHexString()
-
ECMAScript 值
变量可以存在两种类型的值,即原始值和引用值。
原始值
引用值
在许多语言中,字符串都被看作引用类型,而非原始类型,因为字符串的长度是可变的。但JavaScript中去是原始类型。
如果一个值是引用类型的,那么它的存储空间将从堆中分配。由于引用值的大小会改变,所以不能把它放在栈中,否则会降低变量查寻的速度。相反,放在变量的栈空间中的值是该对象存储在堆中的地址。地址的大小是固定的,所以把它存储在栈中对变量性能无任何负面影响。如下图所示:
-
ECMAScript 原始类型
ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String 。
typeof 运算符
var sTemp = "test string";
alert (typeof sTemp); //输出 "string"
alert (typeof 86); //输出 "number"
对变量或值调用 typeof 运算符将返回下列值之一:
- undefined - 如果变量是 Undefined 类型时
- boolean - 如果变量是 Boolean 类型时
- number - 如果变量是 Number 类型时
- string - 如果变量是 String 类型时
-
object - 如果变量是一种引用类型或 Null 类型或数组时
-
function - 如果变量是 Function 类型的,即函数时
function test(param) {
alert(typeof param);//undefined
alert(typeof param == "undefined");//true
alert(param == undefined);//true
/* 虽然这里的param的值是undefined,但这里是可以与 !非运行一起运算的,
因为这里的param其实是已声明了的, 只要是已声明的变量是可以参加!运算的,
未声明的变量是 不能参加运算的。
*/
if (!param) {
return 1;
} else {
return 2;
}
}
alert(!undefined);//true
alert(test());//1
alert(num + 1);//运行时报num未定义
为什么 typeof 运算符对于 null 值会返回 "Object"。这实际上是 JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。
Undefined 类型
Undefined 类型只有一个值,即 undefined。当声明的变量未初始化时,该变量的默认值是 undefined。
没有初始值的变量,该变量将被赋予值 undefined,即 undefined 类型的字面量:
var oTemp;
alert(oTemp == undefined);
alert(typeof oTemp); //输出 "undefined"
注:值 undefined 并不同于未定义的值 。但是,typeof 运算符并不真正区分这两种值。考虑下面的代码:
var oTemp;
alert(typeof oTemp); //输出 "undefined",即使声明过但为初始化时还是undefined
alert(typeof oTemp2); //输出 "undefined",从未声明过的变量也是undefined
如果对 还未声明的变量使用除 typeof 之外的其他运算符的话,会引起错误,因为其他运算符只能用于已声明的变量上:
var oTemp;
alert(oTemp2 == undefined);
当函数无明确返回值时,返回的也是值 "undefined",如下所示:
function testFunc() {
}
alert(testFunc() == undefined); //输出 "true"
undefined是全局对象(window)的一个特殊属性 ,其值是未定义的。但 typeof undefined 返回 'undefined' 。
虽然undefined是有特殊含义的,但它确实是一个属性,而且是全局对象(window)的属性。请看下面的代码:
alert('undefined' in window); //输出:true
var anObj = {};
alert('undefined' in anObj); //输出:false
从中可以看出,undefined是window对象的一个属性,但却不是anObj对象的一个属性。
注意:尽管undefined是有特殊含义的属性,但却不是JavaScript的保留关键字。
undefined参与任何数值计算时,其结果一定是NaN。
随便说一下,NaN是全局对象(window)的另一个特殊属性,Infinity也是。这些特殊属性都不是JavaScript的保留关键字 !
Null 类型
另一种只有一个值的类型是 Null,它只有一个专用值 null,即它的字面量。值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的 。 alert(null == undefined); //输出 "true"
尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象 。
null 是 JavaScript 保留关键字。
null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值:
表达式:123 + null 结果值:123
表达式:123 * null 结果值:0
Boolean 类型
它有两个值 true 和 false (即两个 Boolean 字面量)。即使 false 不等于 0,0 也可以在必要时被转换成 false,这样在 Boolean 语句中使用两者都是安全的。
Number 类型
这种类型既可以表示 32 位的整数,还可以表示 64 位的浮点数 。直接输入的(而不是从另一个变量访问的)任何数字都被看做 Number 类型的字面量。
var iNum = 86;
八进制数和十六进制数
var iNum = 070; //070 等于十进制的 56
var iNum = 0x1f; //0x1f 等于十进制的 31
var iNum = 0xAB; //0xAB 等于十进制的 171
注:尽管所有整数都可以表示为八进制或十六进制的字面量,但所有数学运算返回的都是十进制结果。
浮点数
要定义浮点值,必须包括小数点和小数点后的一位数字(例如,用 1.0 而不是 1)。这被看作浮点数字面量。例如:
var fNum = 5.0;
对于浮点字面量的有趣之处在于,用它进行计算前,真正存储的是字符串 。
科学计数法
对于非常大或非常小的数,可以用科学计数法表示浮点数,可以把一个数表示为数字(包括十进制数字)加 e(或 E),后面加乘以 10 的倍数。例如:
var fNum = 5.618e7;
var fNum = 5.618e+7;
var fNum = 5.618e-7;
ECMAScript 默认把具有 6 个或 6 个以上前导 0 的浮点数转换成科学计数法 :
alert(0.000001); //弹出0.000001,因为前面只有五个零,所以原样显示
alert(0.0000001);//弹出1e-7,因为1前面有六个零,所以用科学计数法
十进制值最多可以有 17 个十进制位。17 位之后的值将被裁去,从而造成一些小的数学误差。
alert(0.123456789123456789123); //弹出0.12345678912345678 (此种情况下17后截断时不四舍五入?)
alert(0.00123456789123456789123); //弹出0.001234567891234568, 从小数点后连续的是最后一个零后面数字开始算起,最多保留17位小数
alert(123456789012345678912); //弹出123456789012345680000,17位后被截断(四舍五入 ),用零补齐
alert(1234567890123456789123); //弹出1.2345678901234568e21,17位后被截断,用零补齐,且超过21位用科学计数法表示
特殊的 Number 值
Number.MAX_VALUE 和 Number.MIN_VALUE,它们定义了 Number 值集合的外边界。所有 ECMAScript 数都必须在这两个值之间。不过计算生成的数值结果可以不落在这两个值之间。
当计算生成的数大于 Number.MAX_VALUE 时,它将被赋予值 Number.POSITIVE_INFINITY,意味着不再有数字值。同样,生成的数值小于 Number.MIN_VALUE 的计算也会被赋予值 Number.NEGATIVE_INFINITY,也意味着不再有数字值。如果计算返回的是无穷大值,那么生成的结果不能再用于其他计算。
构造函数 Number() 可以不与运算符 new 一起使用,而直接作为转化函数来使用。以这种方式调用 Number() 时,它会把自己的参数转化成一个数字,然后返回转换后的原始数值(或 NaN)。
Number有以下属性,这5 个常量是构造函数 Number() 自身的属性,而不是单独的某个 Number 对象的属性。
Number.MAX_VALUE 可表示的最大的数。
Number.MIN_VALUE 可表示的最小的数。
Number.NaN 非数字值。
Number.NEGATIVE_INFINITY 负无穷大,溢出时返回该值。
Number.POSITIVE_INFINITY 正无穷大,溢出时返回该值。
Infinity 代表正的无穷大的数值。(属于JavaScript全局属性)
NaN 指示某个值是不是数字值。(属于JavaScript全局属性
isFinite() 方法,它是一个JavaScript全局函数,判断是否是有穷。
alert(Number.POSITIVE_INFINITY);//弹出: Infinity
alert(Number.NEGATIVE_INFINITY);//弹出: -Infinity
alert(Number.POSITIVE_INFINITY==Infinity);//弹出: ture
alert(Number.NEGATIVE_INFINITY==Infinity);//弹出: false
alert(Number.NEGATIVE_INFINITY==-Infinity);//弹出: true
alert(isFinite(Number.POSITIVE_INFINITY));//弹出: false
alert(isFinite(Number.NEGATIVE_INFINITY));//弹出: false
alert(isFinite(window.Infinity));//弹出: false
alert(isFinite(-window.Infinity));//弹出: false
alert(isFinite(-1));//弹出: true
alert(isFinite("a"));//弹出:false
最后一个特殊值是 NaN,表示非数(Not a Number)。
alert(NaN == NaN); //输出 "false"
因为它与自身不相等, 判断某个数是否是数字,推荐用isNum() 方法,它是一个JavaScript全局函数。
alert(isNaN("blue")); //输出 "true"
alert(isNaN("666")); //输出 "false"
alert(isNaN("6664g")); //输出 "true"
String 类型
是唯一没有固定大小的原始类型。组成Javascript字符串的字符都是Unicode 字符。
字符串字面量是由双引号(")或单引号(')声明的。而 Java 则是用双引号声明字符串,用单引号声明字符。但是由于 ECMAScript 没有字符类型,所以可使用这两种表示法中的任何一种。
\0nnn 八进制代码 nnn(3位 ) 表示的字符(n 是 0 到 7 中的一个八进制数字)
\xnn 十六进制代码 nn(2位 ) 表示的字符(n 是 0 到 F 中的一个十六进制数字)
\unnnn 十六进制代码 nnnn(4位 ) 表示的 Unicode 字符(n 是 0 到 F 中的一个十六进制数字)
发表评论
-
HTML、JS、JSON特殊字符
2010-12-13 23:47 25878JS到HTML特殊字符转换 这几天做项目,发现从服务器端以J ... -
HTML — HTTP URL 中的特殊字符
2009-10-31 18:16 32951. + URL中的+号表示空格 ... -
HTML — CSS选择器
2009-10-25 21:11 2157一个样式规则由两部分组成:选择器和样式声明。选择器表明要为哪一 ... -
部分解决JsUnit无法在firefox3、safari 测试的问题
2009-10-25 07:03 1438在上一篇中出现了一个问题,就是用 jsunit2.2alpha ... -
JsUnit——eclipse插件(四)
2009-10-25 06:59 2445这节我们来看看如何通过JsUnit插件来运行前几节所测试过的测 ... -
10、JavaScript跨浏览器需注意的问题——ajax基础笔记
2009-10-21 22:19 1370向表中追加行 创建表格行时,我们要把创建的 tr 追加到 t ... -
JsUnit详解——Web服务方式(三)
2009-10-21 00:21 2450上两节提到过以Web方式来运行JsUnit,不过不是很详细,这 ... -
JsUnit详解——《ajax基础》笔记(二)
2009-10-20 22:38 2524使用标准/定制查询串 如此说来,测试运行工具是很强大的,但是 ... -
JsUnit详解——《ajax基础》笔记(一)
2009-10-20 19:57 2613JsUnit与JUnit对比 JsUnit也有setUp() ... -
使用Firefox的Web开发插件
2009-10-18 17:53 1473Firefox的Web开发插件为Firefox浏览器增加了大量 ... -
9、访问WEB服务(REST)——ajax基础笔记
2009-10-18 17:24 4022最其名的WEB服务实现是S ... -
8、读取响应头部——ajax基础笔记
2009-10-18 17:20 6753你有时可能需要从服务器获取一些内容,例如,可能想“ping”一 ... -
7、使用JSON向服务器发送数据——ajax基础笔记
2009-10-18 17:20 5212看过前面的例子后(使用XML向服务器发送复杂的数据结构),你可 ... -
6、请求参数作为XML发送——ajax基础笔记
2009-10-18 17:20 1772如果只是使用一个包含 名/值 对的简单查询串,这可能不够健壮, ... -
4、将使用W3C DOM动态生成页面——ajax基础笔记
2009-10-18 17:19 1432使用W3C DOM动态生成页面 dynamicContent ... -
3、将响应解析为XML——ajax基础笔记
2009-10-18 17:18 1062将响应解析为XML parseXML.xml清单: < ... -
2、使用innerHTML属性创建动态内容——ajax基础笔记
2009-10-18 17:17 1923使用innerHTML属性创建动态内容 如果结合作用HTML ... -
1、使用XMLHttpRequest对象——ajax基础笔记
2009-10-18 17:17 2018XMLHttpRequest最早是在 IE5 中以active ... -
30、JavaScript代码优化
2009-10-16 21:25 1566JavaScript代码的速度被分成两部分:下载时间和执行速度 ... -
JavaScript代码优化(二)
2009-10-16 01:32 1196◆字符串的使用 在IE6和IE7中因字符串级联导致的主要问题 ...
相关推荐
"原始类型、包装类和原始类型所占的字节数" 原始类型(primitive type)是指 Java 中最基本的数据类型,它们是 Java 虚拟机(JVM)中所支持的基本类型。每种原始类型都对应着一个包装类(Wrapper Class),包装类是...
Java编程语言中有两种基本的数据类型:原始类型(Primitive Types)和引用类型(Reference Types),它们在行为、存储和使用上存在显著的区别。 1. **原始类型(Primitive Types)**: - Java的原始类型包括布尔型...
这些原始类型在处理数据时非常高效,但它们不具备对象的特性,例如方法调用。为了使原始类型能够参与面向对象的编程,Java设计了八种对应的包装类(Wrapper Classes):Byte、Short、Integer、Long、Float、Double、...
当我们需要将这些原始类型的数组转换为字符串(String)形式时,通常是为了进行日志记录、输出展示或者与JSON等格式的数据交换。本篇文章将深入探讨如何将Java的原始数组类型转换为String形式,以及这个过程中的关键...
2. **修改表数据类型**:指的是在不删除原有表的情况下,对表中某一列的数据类型进行变更的操作。 #### 标签中的知识点解析 - **DB2 数据类型**:DB2支持多种数据类型,包括数值型、字符型、日期时间型等。了解...
JavaScript是一种动态类型语言,它的类型系统包括两种主要的数据类型:基本数据类型(原始类型)和引用类型。基本数据类型包括Undefined、Null、Boolean、Number和String,它们在内存中的存储方式不同,对性能有着...
let a = '5' + '2'; let b = '5' - '2'; console.log(a, b); //52 3 let a = '' - 1; let b = true + false; let c = null + 1; let d = undefined + 1; let e = [] + []; console.log(a, b, c, d, e) /...
此脚本可将从.elf或者.dwarf文件中提取地址,然后更新到A2L的对应位置,原始版权属于Mathwork % Examples: % 1) Using ELF file to update ECU addresses % >> rtw.asap2SetAddress('model.a2l', 'model.elf'); % % ...
数组(array)是相同类型变量的集合,可以使用共同的名字引用它。数组可被定义为任何类型,可以是...2、数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
在这个过程中,需要注意保持数据的原始格式和精度,以及遵循SEG2标准中的对齐要求。 在实际开发中,可以使用现成的库,如libseg2或OpenSeg2,它们提供了方便的接口来处理SEG2文件。但理解底层的工作原理对于优化...
2. **零装箱和拆箱**:由于只处理原始类型,避免了对象创建和引用的开销。 3. **高效算法**:在内部实现中,hppc使用了高度优化的算法,比如快速哈希映射查找和插入,以及快速排序等。 4. **线程安全**:虽然hppc的...
在本Java实例原始文档中,我们有两个主要章节,分别涵盖了基础的GUI编程和核心的编程概念。以下是这两个章节中涉及的重要知识点的详细说明: **第1章:幻灯片播放程序——布局** 在这一章中,我们将深入学习如何...
在Windows平台上,原始套接字的支持始于Windows XP,但在Windows XP Service Pack 2之后,为了提高安全性,微软限制了原始套接字的使用,限制了某些原始套接字操作可能引发的安全漏洞。 实现原始套接字编程需要较深...
在JavaScript高级程序设计中,了解ECMAScript中的原始类型至关重要,因为它们构成了语言的基础。原始类型包括Undefined、Null、Boolean、Number和String,每一种都有其特定的特性和用途。 首先,`typeof`运算符是...
在本篇中,我们将深入探讨如何使用`this`修饰符为原始类型(如`string`)扩展方法,这将使我们能够为现有的类型添加自定义功能,而无需修改这些类型的源代码。 首先,我们要明白`this`修饰符在扩展方法中的作用。...
在Java中,数据类型主要分为两大类:原始类型(Primitive Types)和引用类型(Reference Types)。原始类型包括布尔型(boolean)、字符型(char)、整型(byte、short、int、long)和浮点型(float、double),而...
下面将详细介绍原始类型和引用类型,包括它们的定义、用途、取值范围等,并解释如何在实际编程中应用这些概念。 ### Java中的数据类型 Java是一种静态类型语言,这意味着变量必须在编译时声明其类型。Java中的数据...
在计算机网络领域,原始套接字(Raw Socket)是一种特殊类型的套接字,它允许应用程序直接访问并控制网络协议栈中的底层传输协议。通过使用原始套接字,开发人员可以模拟一些常用的网络工具,例如Traceroute和Ping...
通常,Go 语言的原始类型(如 int、string、bool 等)的零值并不是 `null`,而是它们各自的默认值(例如,int 类型的零值是 0,string 类型的零值是空字符串,bool 类型的零值是 false)。但在某些情况下,我们希望...