第三章:基本概念(数据类型)
2017-03-14 10:39
309 查看
数据类型
typeof操作符
Undefined类型
Null类型
Boolean类型
Number类型
String类型
Object类型
再谈typeof关键字:前篇文章在讲关键字的时候,我看到这个关键字感觉不是很熟悉,然后去查了查资料,这里再对typeof进行说明。
”undefined”: 这个值未定义
“boolean”: 布尔值
“string”: 字符串
“number”: 数值
“object”: 对象或null
“function”: 函数
如果定义了个变量没有赋值和未定义变量还是有区别的,如执行下面代码会报错:Uncaught ReferenceError: age is not defined:
但实际上undefined是派生自null值的,所以初始化为null和只声明不赋值从结果上来说没有差别。即:
再看下面一段代码:
测试结果是会弹窗的,在这里字符串被自动转换成了对应的Boolean值。
查看0.1+0.2为什么不等于0.3
数值范围(大多数浏览器):
Number.MIN_VALUE:5e-324
Number.MAX_VALUE:1.7976931348623157e+308
超出上面的范围会得到-Infinity(负无穷)和Infinity(正无穷),可以用isFinite()函数判断数值在不在范围内。
NaN(Not a Number),这个数值表示一个本来要返回数值的操作未返回数值的情况(如10/0)。NaN有几个特性:
数值转换
我在测试parseInt(obj)时遇到的困惑:
这里我做一个猜测,parseInt()函数原本只接受一个String类型的参数,但是由于传入的是对象,故自动调用String()也就是调用toString()转成相应的类型。而由于a的toString返回结果依然是NaN,故再次调用valueOf方法转型返回结果。(从而和Number()的调用顺序完全相反)纯属个人猜测。
转换成字符串:使用toString()方法。除了null和undefined没有这个方法,其余都有。字符串的toString()方法会返回一个副本。调用数值的toString()方法可以传递一个基数:
String()方法:可以将任何变量转成字符串类型
如果值有toString()方法,则调用返回结果。
如果是null或者undefined,分别返回”null”、”undefined”。
另外一种转成字符串的方法就是 need + “”,效果和String(need)类似。
每个Object实例都有以下属性和方法:
Constructor:构造函数,通常就是Object()(可以创建构造函数,第六章);
hasOwnproperty(propertyname):用于检查给定的属性在当前对象实例(并非原型)中是否存在。propertyname必须以字符串的形式传递。
isPrototypeOf(object):用于检查传入的对象是否是另外一个对象的原型。(赞不明,看到第五章再来看)
propertyIsEnumerable(propertyname):用于检查给定的属性能否使用for-in来枚举。
toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
toString():返回对象的字符串表示。
valueOf():返回对象的字符串、数值或bool值表示。通常和toString()的返回值相同。
第5、6章有详解。(还没看到)
typeof操作符
Undefined类型
Null类型
Boolean类型
Number类型
String类型
Object类型
数据类型
typeof操作符
js中有五种简单类型(类型首字符大写):Undefined、Null、Boolean、Number和String。(感觉就和java中的基本类型类似)还有一种复杂类型Object。在我看来,Object本质和java中的由类创建的对象没什么区别。再谈typeof关键字:前篇文章在讲关键字的时候,我看到这个关键字感觉不是很熟悉,然后去查了查资料,这里再对typeof进行说明。
”undefined”: 这个值未定义
“boolean”: 布尔值
“string”: 字符串
“number”: 数值
“object”: 对象或null
“function”: 函数
var x; var y = new Array(); function f() { } //typeof 是操作符 不是函数不需要加括号 alert(typeof m); //"undefined" alert(typeof x); //"undefined" alert(typeof true); //"boolean" alert(typeof "some string"); //"string" alert(typeof 95); //"number" alert(typeof y); //"object" alert(typeof null); //"object" null被认为是空的一个对象引用 alert(typeof f); //"function" 其实本质是对象,但是因为函数很特别,故有所区分。
Undefined类型
Underfined类型只有一个值,即特殊的undefined。用var声明变量但未对其赋初值时,这个变量就是undefined。var message = undefined;//这么做没有意义,因为默认值就是undefined alert(message == undefined); //true
如果定义了个变量没有赋值和未定义变量还是有区别的,如执行下面代码会报错:Uncaught ReferenceError: age is not defined:
var message; alert(message); //"undefined" alert(age); //causes an error //对未定义的变量只能调用typeof检测数据类型,其他都会报错。delete不会报错,但是没有意义,在严格模式下不允许delete未定义的变量。
Null类型
Null类型也只有一个值,那就是null。null代表一个空对象指针。如果打算顶一个变量用来保存对象,在没有初始值的时候,最好初始化为null而不是其他值。这样只用检查null值就可以知道相应的变量是否已经保存了一个引用。如:var car = null; ... if (car != null) { //... }
但实际上undefined是派生自null值的,所以初始化为null和只声明不赋值从结果上来说没有差别。即:
alert(undefined == null); //true //即使如此,把一个变量初始化为null还是有意义的,因为它表达的意思是变量存储的是一个对象而不是未知类型。
Boolean类型
这个类型就比较常用了,要注意True和true的不同,前者是可以作为标识符的。然后这里讲一下转换函数Boolean(),这个函数一共有两个返回结果。数据类型 | 返回true | 返回false |
---|---|---|
Boolean | true | false |
String | 非空字符串 | “”(空字符串) |
Number | 任何非零数字(包括无穷大) | 0和NaN |
Object | 任何对象 | null |
var message = "Hello world!"; if (message){ alert("Value is true"); }
测试结果是会弹窗的,在这里字符串被自动转换成了对应的Boolean值。
Number类型
Number类型分为整数和浮点数,下面是一些数值字面量格式://整数:八进制0开头 十六进制0x开头 var intNum = 10; //十进制整数 var octalNum1 = 077; //八进制56 var octalNum2 = 079; //无效八进制 相当于79 var octalNum3 = 08; //无效八进制 相当于8 var haxNum1 = 0xA;//十六进制10 var haxNum2 = 0x1f;//十六进制31 //在进行算数计算时,所有以八进制和十六进制表示的数值最终都会被转换成十进制 //浮点数:存储空间是整数两倍,故js会不失时机的将浮点数转换成整数 var floatNum1 = 1.1; var floatNum2 = 0.1; var floatNum3 = .2;//有效但不推荐 var floatNum4 = 1.;//相当于整数1 var floatNum5 = 10.0;//相当于整数10 var floatNum6 = 3.125e7;//科学计数法 var floatNum7 = 0.0000007;//当小数点后面0的个数大于等于6个 会被自动转成科学计数法7e-7 //浮点数的最高精度是17位小数,但是精确度却远远不如整数 alert(0.1+0.2);//弹出结果不是0.3 alert(0.15+0.15);//弹出结果是0.3
查看0.1+0.2为什么不等于0.3
数值范围(大多数浏览器):
Number.MIN_VALUE:5e-324
Number.MAX_VALUE:1.7976931348623157e+308
超出上面的范围会得到-Infinity(负无穷)和Infinity(正无穷),可以用isFinite()函数判断数值在不在范围内。
NaN(Not a Number),这个数值表示一个本来要返回数值的操作未返回数值的情况(如10/0)。NaN有几个特性:
alert(NaN / 10); //和NaN进行操作会得到NaN alert(0 / 0);// 得到NaN alert(10 / 0); c9de //得到Infinity alert(NaN == NaN); //得到false alert(isNaN(NaN)); //true alert(isNaN(10)); //false 10 is a number alert(isNaN("10")); //false can be converted to number 10 alert(isNaN("blue")); //true cannot be converted to a number alert(isNaN(true)); //false can be converted to number 1 //对于对象也可以用isNaN()去判断,首先调用对象的valueOf()方法,如果不能转成数值,再基于这个值调用toString()方法。具体后续有。
数值转换
输入 | Number() | parseInt() 可以有第二个参数,代表多少进制。不传的话由函数自己去确定(不可控) | parseFloat() 只解析十进制! |
---|---|---|---|
true/false | 1/0 | NaN | NaN |
null | 0 | NaN | NaN |
undefined | NaN | NaN | NaN |
“-123” | -123 | -123 | -123 |
“0123” | 123 | 123(书上说会转成八进制,但是实验下来没有,并且也没有变成0,所以这里也不知道为什么。最好的做法就是带有第二个参数。) | 123 |
“0xf” | 15 | 15 | 0 |
“” | 0 | NaN | NaN |
“12xew” | NaN | 12 | 12 |
” 12” | 12 | 12 | 12 |
“1xew12” | NaN | 1 | 1 |
“22.5” | 22.5 | 22 | 22.5 |
“22.5.56” | NaN | 22 | 22.5 |
“3.52e7” | 35200000 | 35200000 | 35200000 |
对象 | 先valueOf()不行再toString()下一篇文章有例子 | 下面在讨论 |
var a = { valueOf: function () { return 1; }, toString: function () { return b; } } var b = { valueOf: function () { return "12"; }, toString: function () { return "2"; } } alert(parseInt(a));//1 为什么输出valueOf的1 而不是2 alert(parseInt(b));//2 为什么输出toString的2 而不是12
这里我做一个猜测,parseInt()函数原本只接受一个String类型的参数,但是由于传入的是对象,故自动调用String()也就是调用toString()转成相应的类型。而由于a的toString返回结果依然是NaN,故再次调用valueOf方法转型返回结果。(从而和Number()的调用顺序完全相反)纯属个人猜测。
String类型
字符字面量字面量 | 含义 |
---|---|
\n | 换行 |
\t | 制表 |
\b | 退格 |
\f | 换页 |
\xnn | 以16进制代码nn表示的一个字符(n取值0~f)。例如\x41表示”A”。(length只会当1) |
\unnnn | 以16进制代码nnnn表示的一个Unicode字符(n取值0~f)。例如\u03a3表示希腊字母”Σ”。(length只会当1) |
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或者undefined,分别返回”null”、”undefined”。
另外一种转成字符串的方法就是 need + “”,效果和String(need)类似。
Object类型
创建方式:var obj1 = new Object(); var obj2 = new Object;//如果不传参,可省略括号,但是不推荐。
每个Object实例都有以下属性和方法:
Constructor:构造函数,通常就是Object()(可以创建构造函数,第六章);
hasOwnproperty(propertyname):用于检查给定的属性在当前对象实例(并非原型)中是否存在。propertyname必须以字符串的形式传递。
isPrototypeOf(object):用于检查传入的对象是否是另外一个对象的原型。(赞不明,看到第五章再来看)
propertyIsEnumerable(propertyname):用于检查给定的属性能否使用for-in来枚举。
toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
toString():返回对象的字符串表示。
valueOf():返回对象的字符串、数值或bool值表示。通常和toString()的返回值相同。
第5、6章有详解。(还没看到)
相关文章推荐
- 第三章(基本概念——语法,数据类型,流程控制语句,函数)
- JS高级程序设计学习笔记之第三章基本概念(语法,数据类型,流控制语句,函数)——查漏补缺
- 读书笔记 JavaScript高级程序设计 第三章 基本概念-数据类型
- 学习笔记(二)JavaScript基本概念(语法,数据类型,控制语句,函数)
- MongoDB学习(二):数据类型和基本概念
- 学习opencv第三章 基本数据类型 ,矩阵创建,操作,访问
- JAVA笔记一(01-06 java的基本概念和数据类型)
- C++ Primer 学习笔记--基本概念和数据类型
- 数据挖掘中基本概念--数据类型的属性与度量
- 读javascript高级程序设计01-基本概念、数据类型、函数
- MongoDB学习(二):数据类型和基本概念
- Lesson_for_java_day04--java基本知识、概念、变量、基本数据类型、运算符及表达式
- Java第一课 Java的一些基本概念,Java的起源、为什么我们要学习Java语言,Java跨平台原理剖析;Java环境变量的配置,初学者常犯的问题,Java语言的基本数据类型和Java的语句。
- 数据类型,数据基本概念
- 2014.12.17数据类型编程的基本概念
- Python宝典第三章:Python数据类型与基本语句
- 嵌入式开发之C基础学习笔记03--基本数据类型,操作符,修饰符等基本概念
- Java核心编程第三章java的基本数据类型及运算符的总结
- (3)javascript 基本概念--- -- 数据类型
- 基本概念-数据类型