JavaScript 入门教程四 语言基础【2】
一、数据类型介绍: undefined null NaN
1、判断当前变量是否为 undefined: if (i === undefined) 或者 if (typeof (i) === "undefined")
未初始化的变量默认会取得 undefined 值。而未声明的变量只有使用 typeof 不会出错,其余情况下都会出错。
例子: var message;
alert(message); // "undefined"
alert(message1); // 错误
alert(typeof (message)); // "undefined"
alert(typeof (message1)); // "undefined"
2、判断当前变量是否为 null : if (i === null) null 的类型为object,表示的是一个空对象指针。
3、注意 === 要求两边的值以及类型都一样。而==只要求两边的值一样 故 “1”==true 返回的是 true 而 “1”===true 返回的是 false)。
4、undefined 是为了定义未初始化的变量或者未声明的变量,而null 值是为了保存对象。
所以当想用一个变量存储对象时 可以这样: var car = null;
而声明普通变量而且想使用它存储字符串时 可以这样: var message = "message"; // 如果想用 message 存储 数字,应该这样 var message = 0;
5、涉及NaN 的所有操作返回结果都为 NaN。 与判断 NaN 使用函数 isNaN(返回结果为bool值 true 或者 false): if(isNaN(0 / 0)) 返回结果true。NaN的数据类型为 number 它不与任何数值相等,包括它自己。
isNaN 可以适用于任何变量,只要该变量可以转化成数值,则返回false。
alert(isNaN("1")); // false
alert(isNaN(true)); //false
alert(isNaN("blue")); // true
所以判断一个变量是否为 NaN,判断条件为 var test; if(isNaN(test)&&typeof(test)==="number"){}
二、数据类型介绍: Boolean
Boolean 类型只有两个值:true false。 任何数据类型都可以转换成 Boolean 类型(使用函数 Boolean())。在 IF 等控制语句中会自动执行相应的转换。
undefined 和 null 只能转换为 false
0 和 Nas 转化成 false ,其余均为 true
空字符串转换为 false,其余均为true
Object 转换为 true
三、数据类型介绍: Number
1、几个特殊数值的计算:
alert(0/0); // NaN
alert(0/1);// 0
alert(1/0); // Infinity
alert(-1/0); // -Infinity
可以使用函数 isFinite() 验证数值是不是位于 -Infinity 与 Infinity 之间。
2、数值中的整数可以用 10进制 8进制 16进制表示。
例如:11
十进制表示是11
八进制表示是 013
十六进制表示是 0xb 或者 0xB
八进制在严格模式下会报错,建议不要使用。如果八进制字面值中的数字超出了范围,将被解析成十进制,例如 018,将被解释为 18.
3、浮点数必须包含一个小数点,而且小数点后必须至少有一位数字。
var float1 = 1.0; // 有效 但是会被存储为整数 1
var float1 = 1.; // 有效 但是会被存储为整数 1
var float2 = 1.1; //有效浮点数
var float3 = .1; // 有效,被解释称 0.1 但是不推荐。
对于极大或者极小的数值,使用e表示法。例如: var float4 = 3.14e2; 或者 var float5 = 3.14E2 表示的就是 3.14 × 102 即 314。
4、浮点数的计算
alert((0.1+0.2)==0.3) 返回的结果为 false,因为 0.1+0.2 的计算结果为 0.30000000000000004 这是因为计算机是先把0.1 和 0.2 转换成二进制再进行计算,而javaScript 没有处理这种精度误差,所以会出现这样结果。
解决精度问题:
Math.formatFloat = function (f, digit) {
var m = Math.pow(10, digit);
return parseInt((f * m)) / m;
}
alert(Math.formatFloat(0.1 + 0.2, 1)); // 0.3
将计算结果先转化为整数,再除以幂次。
其他方法参考文章 JavaScript精度计算
5、有三个函数可以把非数值转换为数值。
㈠ Number() 可转换整数和浮点数
alert(Number()); //0
alert(Number(null)); //0
alert(Number(undefined)); //NaN
alert(Number(NaN)); //NaN NaN 是数值型,所以返回自己
alert(Number(true)); //1
alert(Number(false)); //0 Boolean 的转换
alert(Number("")); //0 空字符返回0
alert(Number("-1")); // -1
alert(Number("012")); //12 对于纯数字的字符串将其转为十进制返回
alert(Number("1.12")); //1.12
alert(Number(".1")); //0.1
alert(Number("1.0")); //1 对于带小数点的纯浮点数,返回对应的浮点值
alert(Number("0xa")); //10
alert(Number("0x12")); //18
alert(Number("0x1h")); //NaN 对于包含有效十六进制的字符串,返回对应的十进制值
alert(Number("123abc")); //NaN
alert(Number("a123")) //NaN
alert(Number("A")); //NaN 其余字符串均返回 NaN
㈡ parseInt(value,radix) 主要是对字符串进行整数转换
参数value 需要转换的变量 radix 转换基数(多少进制)
对于非字符串的 null undefined NaN true false 转换结果均为 NaN
alert(parseInt("")); //NaN
alert(parseInt("abc123")); //NaN 转换字符串时寻找第一个非空字符,如果没有或者不是数字或者不是 - 则返回NaN
alert(parseInt("-123-456")); //-123 转换字符串时寻找第一个非空字符 - 直遇到一个非数字字符 - 返回之前的 -123
alert(parseInt("123abc456")); //123 // 遇到第一个非空字符 1 解析后续字符,直遇到一个非数字字符 a 返回之前的 123
alert(parseInt(100)); //100
alert(parseInt(100.58)); //100 无法解析小数点 返回 100
由于 ES 解析的差异,我们需要添加第二位参数: 转换基数
例如 alert(parseInt(070)); // ES3认为其为8进制 返回 56 而 ES5 认为其为十进制 忽略前导0 返回 70
alert(parseInt("012", 10)); //12 十进制 忽略前导0 返回12
alert(parseInt("012", 8)); //10 八进制,返回 1×8 + 2 = 10
alert(parseInt("012", 16)); //18 十六进制,返回 1×16 + 2 = 18
加上第二个参数后,八进制前面的数字 0 以及十六进制前面的 0x 可以省略
alert(parseInt("0xa")); //10
alert(parseInt("a", 16)); //10
alert(parseInt("a")); //NaN 没有加第二个参数,当作普通字符串处理
㈢ parseFloat(value) 也主要是处理对字符串的转换 只有一个参数
它转换的字符串可以包含小数点.
它只解析十进制数,其他进制数返回0
alert(parseFloat("1234blue")); //1234 (整数)
alert(parseFloat("0xA")); //0 只解释十进制
alert(parseFloat("22.5")); //22.5
alert(parseFloat("22.34.5")); //22.34
alert(parseFloat("0908.5")); //908.5
alert(parseFloat("3.125e7")); //31250000
alert(parseFloat(".5")); //0.5
alert(parseFloat("1.5e3F")); //1500
alert(parseFloat("1.5ea3")); //1.5 从非空处(- . 数字开头)开始解析,到遇见一个无效的浮点数为止
JavaScript 入门教程四 语言基础【2】的更多相关文章
- JavaScript 入门教程四 语言基础【3】
一.数据类型介绍: String 1.是使用 Unicode 字符组成的字符序列.所以可以容纳各种语言. 2.字符串可以使用双引号(“”)或者单引号('')表示,但必须成对出现. 3.转移序列使用 \ ...
- JavaScript 入门教程三 语言基础【1】
一.基本介绍 1.JavaScript 是一种区分大小写的语言.(var Hello 与 var hello 是不同的变量) 2.JavaScript 中标志符就是指变量.函数.属性的名字,或者函数 ...
- Java入门教程二(语言基础)
常量与变量 常量值又称为字面常量,它是通过数据直接表示 常量 实型常量值 Java 的实型常量值主要有如下两种形式 十进制数形式:由数字和小数点组成,且必须有小数点,如 12.34.-98.0 科学记 ...
- 无废话ExtJs 入门教程四[表单:FormPanel]
无废话ExtJs 入门教程四[表单:FormPanel] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在窗体里加了个表单.如下所示代码区的第28行位置,items:form. ...
- Android Studio系列教程四--Gradle基础
Android Studio系列教程四--Gradle基础 2014 年 12 月 18 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzhang ...
- Elasticsearch入门教程(四):Elasticsearch文档CURD
原文:Elasticsearch入门教程(四):Elasticsearch文档CURD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...
- JasperReports入门教程(四):多数据源
JasperReports入门教程(四):多数据源 背景 在报表使用中,一个页面需要打印多个表格,每个表格分别使用不同的数据源是很常见的一个需求.假如我们现在有一个需求如下:需要在一个报表同时打印所有 ...
- ArcGIS API for JavaScript 入门教程[0] 目录
随时翻看. 转载注明出处,博客园/CSDN/B站:秋意正寒. Part 1 必看 ArcGIS API for JavaScript 入门教程[1] 渊源 你还真不一定知道这是啥.非得学吗? ArcG ...
- PySide——Python图形化界面入门教程(四)
PySide——Python图形化界面入门教程(四) ——创建自己的信号槽 ——Creating Your Own Signals and Slots 翻译自:http://pythoncentral ...
随机推荐
- 1.reset.css的设置
/* reset css */ *, ::before, ::after{ /*选择所有的标签 */ margin: 0; padding: 0; /*清除移动端默认的 点击高亮效果*/ -webki ...
- 【HNOI2008】Cards BZOJ 1004
Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目 前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张 ...
- MQTT(二)推送
MQTT V3.1----publish解读 - leeying - 博客园 http://www.cnblogs.com/leeying/p/3791341.html MQTT - 聂永的博客 - ...
- “连接配置中心失败,将无法进行正常管理”--腾讯通RTX管理器
[故障现象]: 腾讯通RTX管理器提示“连接配置中心失败,将无法进行正常管理” [解决办法]: 在系统服务中启动“RTX_ConfigCenter”服务即可. 文章收集自网络
- 提额 APP
提额 APP 开始参与这个APP也是巧合,一个月之前,我还在忙于电信运营商的工作,上级就过来问我在之前公司有没有用过 html css js这些.在维库的时候,可是从前台到后台都是要全包的呀,因为项目 ...
- Indy FTP 警告:Only one TIdAntiFreeze can be active in an application
> Should I use a AntiFreeze component on every form I have a TIdTCPClient > component? Or is ...
- C#设计模式之工厂方法
工厂方法模式: 1.不再提供一个按钮工厂类来统一负责所有产品的创建,而是将具体按钮的创建过程交给专门的工厂子类去完成 如果出现新的按钮类型,只需要为这种新类型的按钮定义一个具体的工厂类就可以创建该新按 ...
- __cdecl 、__fastcall、__stdcall
调用约定: __cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数 ...
- CSC321 神经网络语言模型 RNN-LSTM
主要两个方面 Probabilistic modeling 概率建模,神经网络模型尝试去预测一个概率分布 Cross-entropy作为误差函数使得我们可以对于观测到的数据 给予较高的概率值 同时可以 ...
- Arch Linux中文乱码解决
Arch Linux中文乱码解决 1.安装中文字体 pacman -S wqy-zenhei ttf-fireflysung (flash乱码) ---乱码的原因就是缺少中文字体的支持,下载文泉驿 ...