- 浏览: 1325491 次
- 性别:
- 来自: 湖南澧縣
文章分类
最新评论
-
虾米小尹:
不行啊!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 25813JS到HTML特殊字符转换 这几天做项目,发现从服务器端以J ... -
HTML — HTTP URL 中的特殊字符
2009-10-31 18:16 32381. + URL中的+号表示空格 ... -
HTML — CSS选择器
2009-10-25 21:11 2121一个样式规则由两部分组成:选择器和样式声明。选择器表明要为哪一 ... -
部分解决JsUnit无法在firefox3、safari 测试的问题
2009-10-25 07:03 1406在上一篇中出现了一个问题,就是用 jsunit2.2alpha ... -
JsUnit——eclipse插件(四)
2009-10-25 06:59 2403这节我们来看看如何通过JsUnit插件来运行前几节所测试过的测 ... -
10、JavaScript跨浏览器需注意的问题——ajax基础笔记
2009-10-21 22:19 1323向表中追加行 创建表格行时,我们要把创建的 tr 追加到 t ... -
JsUnit详解——Web服务方式(三)
2009-10-21 00:21 2396上两节提到过以Web方式来运行JsUnit,不过不是很详细,这 ... -
JsUnit详解——《ajax基础》笔记(二)
2009-10-20 22:38 2487使用标准/定制查询串 如此说来,测试运行工具是很强大的,但是 ... -
JsUnit详解——《ajax基础》笔记(一)
2009-10-20 19:57 2539JsUnit与JUnit对比 JsUnit也有setUp() ... -
使用Firefox的Web开发插件
2009-10-18 17:53 1437Firefox的Web开发插件为Firefox浏览器增加了大量 ... -
9、访问WEB服务(REST)——ajax基础笔记
2009-10-18 17:24 3974最其名的WEB服务实现是S ... -
8、读取响应头部——ajax基础笔记
2009-10-18 17:20 6715你有时可能需要从服务器获取一些内容,例如,可能想“ping”一 ... -
7、使用JSON向服务器发送数据——ajax基础笔记
2009-10-18 17:20 5145看过前面的例子后(使用XML向服务器发送复杂的数据结构),你可 ... -
6、请求参数作为XML发送——ajax基础笔记
2009-10-18 17:20 1725如果只是使用一个包含 名/值 对的简单查询串,这可能不够健壮, ... -
4、将使用W3C DOM动态生成页面——ajax基础笔记
2009-10-18 17:19 1367使用W3C DOM动态生成页面 dynamicContent ... -
3、将响应解析为XML——ajax基础笔记
2009-10-18 17:18 1019将响应解析为XML parseXML.xml清单: < ... -
2、使用innerHTML属性创建动态内容——ajax基础笔记
2009-10-18 17:17 1872使用innerHTML属性创建动态内容 如果结合作用HTML ... -
1、使用XMLHttpRequest对象——ajax基础笔记
2009-10-18 17:17 1981XMLHttpRequest最早是在 IE5 中以active ... -
30、JavaScript代码优化
2009-10-16 21:25 1526JavaScript代码的速度被分成两部分:下载时间和执行速度 ... -
JavaScript代码优化(二)
2009-10-16 01:32 1158◆字符串的使用 在IE6和IE7中因字符串级联导致的主要问题 ...
相关推荐
生活 使用2D数据结构(数组)和原始类型模拟Conway的生命游戏
原始类型封装类booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和...
JAVA实例教材原始文档: 第1章 幻灯片播放程序——布局 第2章 计算器程序——数据类型、运算符和表达式
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) /...
数组(array)是相同类型变量的集合,可以使用共同的名字引用它。数组可被定义为任何类型,可以是...2、数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
java泛型和原始类型不能很好地结合,因此类容器数据结构往往不支持原始类型(除非通过自动装箱的解决方法)。 我在这里试图回答的问题是,从后备存储的规范中完全分离集合接口可以获得多少里程。 特别是,是否有...
上传功能修正已知安全bug(限制上传文件类型)2.自动生成缩略图(大小可在config.php中设置)3.多种排序方法4.限制原始图的大小和宽高
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为 int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 booleanBoolean charCharacter byte...
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
以字母r或R引导的表示原始字符串 字节串 bytes b'hello world' 以字母b引导,可以使用单引号、双引号、三引号作为定界符 列表 list [1, 2, 3],['a', 'b', ['c', 2]] 所有元素放在一对方括号中,元素之间使用逗号...
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
2.2 比特和字节:原始的Java类型 2.2.1 基本的整数类型 2.2.2 浮点类型 2.2.3 Char类型 2.2.4 布尔型 2.2.5 String类型 2.2.6 强制转换变量类型 2.2.7 Java数据类型、数组和标识符需要记忆的要点 2.3 Java中的运算符...
基本数据类型整数有符号rune类型为int32类型无符号byte类型为uint8类型,强调原始数据尽管Go提供了无符号整数,但是在绝大部分时刻,依然会选择使用有
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
目录 1、Date2、RegExp3、原始包装类型 1、Date 2、RegExp 3、原始包装类型 前言: 引用值(对象)都是某个特定的引用类型的实例对象,例如 Date类型、Function类型,RegExp 正则表达式类型等等。...
3使用名称空间的好处8-10-4名称空间存取控制8-11完全区别名称8-12使用using前置命令建立阶层式类结构8-13使用别名8-14使用命名空间的准则第9章参考类型变量9-1使用参考类型变量9-2参考类型与实值型9-2-1实值类型9-2-...
原始音频流文件pcm,适用于FFmpeg编码为其他格式的音频文件 字符类型:16 通道:2 采样率:44100
NSGA2Type类型已被定义为携带NSGA2算法的所有必要参数。这将减少外部变量的数量,并减少在另一个例程中使用时可能发生的冲突。 从 main() 函数中提取了三个函数,之前在nsga2r.c中。 ReadParamters:通过输入文件或...