Javascript学习笔记-基本概念-数据类型
1、typeof
操作符的返回值:
- "undefined"——如果这个值未定义;
- "boolean"——如果这个值是布尔值;
- "string"——如果这个值是字符串;
- "number"——如果这个值是数值;
- "object"——如果这个值是对象或null;14
- 141"function"——如果这个值是函数。
使用例子:
var message = "some string";
alert(typeof message); // "string"
alert(typeof(message)); // "string"
alert(typeof 95); // "number"
2、undefined
使用var声明变量但未对其加以初始化时,这个变量的值就是undefined,例如:
var message;
alert(message == undefined); //true
以上和下面的是对等的。
var message = undefined;
alert(message == undefined); //true
对未初始化的变量执行typeof 操作符会返回undefined 值,而对未声明的变量执行typeof 操作符同样也会返回undefined 值。
var message; // 这个变量声明之后默认取得了undefined 值
// 下面这个变量并没有声明
// var age alert(typeof message); // "undefined"
alert(typeof age); // "undefined"
3、null
null 值表示一个空对象指针,使用typeof 操作符检测null 值时会返回"object
var car = null;
alert(typeof car); // "object"
4、Boolean
可以调用转型函数Boolean(),将一个值转换为其对应的Boolean 值。
var message = "Hello world!";
var messageAsBoolean = Boolean(message);
数据类型 |
转换为true的值 |
转换为false的值 |
Boolean |
true |
false |
String |
任何非空字符串 |
""(空字符串) |
Number |
任何非零数字值(包括无穷大) |
0和NaN |
Object |
任何对象 |
null |
Undefined |
n/a(不适用) |
undefined |
var message = "Hello world!";
if (message){
alert("Value is true");
}
5、number
可以用来表示十进制整数,如:
var intNum = 55; // 整数
可以用来表示八进制整数,八进制第一位必须是零(0),八进制数字序列(0~7),如果数值超过范围,前导零将被忽略,按照十进制解析,如:
var octalNum1 = 070; // 八进制的56
var octalNum2 = 079; // 无效的八进制数值——解析为79
var octalNum3 = 08; // 无效的八进制数值——解析为8
可以表示十六进制,前面两位必须是0x,后面跟任何十六进制数字(0~9及A~F),字母A~F可以大写也可以小写,如:
var hexNum1 = 0xA; // 十六进制的10
var hexNum2 = 0x1f; // 十六进制的31
在进行算术计算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制数值。
(1)浮点数值
所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。虽然小数点前面可以没有整数,但不推荐,如
var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1; // 有效,但不推荐
对于那些极大或极小的数值,可以用e 表示法(即科学计数法)表示的浮点数值表示。
var floatNum = 3.125e7; // 等于31250000
(2)数值范围
ECMAScript 能够表示的最小数值保存在Number.MIN_VALUE 中——在大多数浏览器中,这个值是5e-324;
能够表示的最大数值保存在Number.MAX_VALUE 中——在大多数浏览器中,这个值是1.7976931348623157e+308。
超出JavaScript 数值范围的值,那么这个数值将被自动转换成特殊的Infinity 值。如果这个数值是负数,则会被转换成-Infinity(负无穷),如果这个数值是正数,则会被转换成Infinity(正无穷)。
(3)NaN
NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)
NaN 本身有两个非同寻常的特点:
- 任何涉及NaN 的操作(例如NaN/10)都会返回NaN;
- NaN 与任何值都不相等,包括NaN 本身。
isNaN()函数, 确定这个参数是否“不是数值”。isNaN()在接收到一个值之后,会尝试
将这个值转换为数值。某些不是数值的值会直接转换为数值,如:
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false(10 是一个数值)
alert(isNaN("10")); //false(可以被转换成数值10)
alert(isNaN("blue")); //true(不能转换成数值)
alert(isNaN(true)); //false(可以被转换成数值1)
(4)数值转换
Number()函数可以用于任何数据类型,parseInt()和parseFloat()专门用于把字符串转换成数值。
Number()函数的转换规则如下。
- 如果是Boolean 值,true 和false 将分别被转换为1 和0。
- 如果是数字值,只是简单的传入和返回。
- 如果是null 值,返回0。
- 如果是undefined,返回NaN。
- 如果是字符串,遵循下列规则:
- 如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值
- 如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值
- 如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值;
- 如果字符串是空的(不包含任何字符),则将其转换为0
- 如果字符串中包含除上述格式之外的字符,则将其转换为NaN。
- 如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。
var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //
var num3 = Number("000011"); //
var num4 = Number(true); //
parseInt()函数的转换规则:
var num1 = parseInt("1234blue"); //
var num2 = parseInt(""); // NaN
var num3 = parseInt("0xA"); // 10(十六进制数)
var num4 = parseInt(22.5); //
var num5 = parseInt("070"); // 56(八进制数)
var num6 = parseInt("70"); // 70(十进制数)
var num7 = parseInt("0xf"); // 15(十六进制数)
为了消除在使用parseInt()函数时可能导致分歧问题,转换时引入基数(即多少进制),如:
var num = parseInt("0xAF", 16); //
//引入基数后,十六进制字符串前面可以不用带“0x”
var num1 = parseInt("AF", 16); //
var num2 = parseInt("AF"); //NaN var num1 = parseInt("10", 2); //2 (按二进制解析)
var num2 = parseInt("10", 8); //8 (按八进制解析)
var num3 = parseInt("10", 10); //10 (按十进制解析)
var num4 = parseInt("10", 16); //16 (按十六进制解析)
parseFloat()函数转换规则:
var num1 = parseFloat("1234blue"); //1234 (整数)
var num2 = parseFloat("0xA"); //
var num3 = parseFloat("22.5"); //22.5
var num4 = parseFloat("22.34.5"); //22.34
var num5 = parseFloat("0908.5"); //908.5
var num6 = parseFloat("3.125e7"); //
6、String
(1)字符字面量
字面量 | 含义 |
\n | 换行 |
\t | 制表 |
\b | 空格 |
\r | 回车 |
\f | 进纸 |
\\ | 斜杠 |
\' | 单引号('),在用单引号表示的字符串中使用。例如:'He said, \'hey.\'' |
\" | 双引号("),在用双引号表示的字符串中使用。例如:"He said, \"hey.\"" |
\xnn | 以十六进制代码nn表示的一个字符(其中n为0~F)。例如,\x41表示"A" |
\unnnn | 以十六进制代码nnnn表示的一个Unicode字符(其中n为0~F)。例如,\u03a3表示希腊字符Σ |
任何字符串的长度都可以通过访问其length 属性取得.
var text = "This is the letter sigma: \u03a3.";
alert(text.length); // 输出28
转换为字符串
var age = 11;
var ageAsString = age.toString(); // 字符串"11"
var found = true;
var foundAsString = found.toString(); // 字符串"true"
多数情况下,调用toString()方法不必传递参数。但是,在调用数值的toString()方法时,可以传递一个参数:输出数值的基数。
var num = 10;
alert(num.toString()); // "10"
alert(num.toString(2)); // "1010"
alert(num.toString(8)); // "12"
alert(num.toString(10)); // "10"
alert(num.toString(16)); // "a"
String()函数遵循下列转换规则:
- 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果;
- 如果值是null,则返回"null";
- 如果值是undefined,则返回"undefined"。
var value1 = 10;
var value2 = true;
var value3 = null;
var value4;
alert(String(value1)); // "10"
alert(String(value2)); // "true"
alert(String(value3)); // "null"
alert(String(value4)); // "undefined"
7、object
ECMAScript的对象就是一组数据和功能的集合。
创建格式:
var o = new Object();
var o = new Object; // 有效,但不推荐省略圆括号
Object的属性和方法:
- constructor:保存着用于创建当前对象的函数,对于前面的例子,构造函数(constructor)就是Object()。
- hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。
- isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型。
- propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in 语句来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。
- toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
- toString():返回对象的字符串表示。
- valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。
最新文章
- Android中Handler 、Thread和Runnable之间的关系
- 无废话ExtJs 入门教程三[窗体:Window组件]
- 使用 ServiceStack.Text 序列化 json 比Json.net更快
- POJ 2104 K-th Number(划分树)
- C++运算符重载——重载二元运算符
- mysql导入数据库
- UIScrollView的几个要点总结
- Ubuntu server搭建Java web服务器
- qt编译的基于xlib cairo的桌面程序
- http 四大特征
- nnet3配置中的“编译”
- linux终端提示符显示bash-4.2#
- Delphi 10.3.1 Secure File Sharing解决应用间文件共享
- Error:svn: E160013 svn主干切换分支时报错
- Python基础之Python的变量、常量
- Ubuntu显示实时网速CPU内存等参数
- OpenStack中RabbitMQ高可用性配置
- cocos2d-js Shader系列1:cocos2d-js Shader和OpenGL ES2.0
- [QT]QPixmap图片缩放和QLabel 的图片自适应效果对比
- [html] charset
热门文章
- 898A. Rounding#数的舍入
- D. Array Splitting(后缀数组)
- python-django-linux上mysql的安装和配置_20191124
- android翻译应用、地图轨迹、视频广告、React Native知乎日报、网络请求框架等源码
- 关于(int argc char **argv)
- java 内存溢出-与gc
- C# SerialPort 读写三菱FX系列PLC
- mysql数据库常用命令入门
- [SDOI2006] 线性方程组
- haproxy笔记之四:配置文件中的关键字参考