Javascript学习笔记一 之 数据类型_基础知识

一.数据类型
Javascript是一种弱类型的脚本语言,它一共有6种数据类型,又被分为基础数据类型,特殊数据类型,复合数据类型。
   1.基础数据类型:数值型,字符串型,布尔型
   2.特殊数据类型:null,undefined(区别在于null需要显性赋值,而undefined表示没有赋值)
   3.复合(引用)数据类型:Object(数组是特殊的对象)

注:理解基础数据类型和引用数据类型的区别。如函数参数传递

二. 包装类和基础数据类型的关系
对于基础数据类型,都有相应的包装类(Object对象)与之对应。
Number,String,Boolean

注:基础数据类型会在一定条件下转化成基础类型包装对象

复制代码 代码如下:

var str="这是一个基础字符串";
var length=str.length();
//当使用length()时,Javascript解释引擎会产生
//一个str的临时String对象,执行完后临时对象清除

三.如何判断数据类型
(1) typeof(鸡肋)
  仅可检测出以下6种数据类型:number, string, boolean, undefined, object, function(注意!)

复制代码 代码如下:

alert(typeof(null)); //结果为object
alert(typeof(a)); //a未赋值,结果为undefined

因此判断基础数据类型可以如下:

复制代码 代码如下:

function type(o) {
return (o === null) ? 'null' : typeof(o);
}

(2)instanceof
    但对于复合数据类型(除了function),则全部返回object,无法通过typeof判断
可使用instanceof检测某个对象是不是另一个对象的实例,注意instanceof的右操作数必须为对象:

复制代码 代码如下:

function Animal() {};
function Pig() {};
Pig.prototype = new Animal();
alert(new Pig() instanceof Animal); // true

  instanceof不适合用来检测一个对象本身的类型

  (3)constructor

复制代码 代码如下:

alert(1.constructor); // 报错
var o = 1;
alert(o.constructor); // Number
o = null; // or undefined
alert(o.constructor); // 报错
alert({}.constructor); // Object
alert(true.constructor); // Boolean

(4)Object.toString()

复制代码 代码如下:

function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}

call和apply的区别:
  它们都是Function.prototype的方法(针对方法的),它是Javascript引擎内在实现的。
  实际上这两个的作用几乎是相同的,要注意的地方是call(thisObj[,arg1[, arg2[,)中的arg参数可以是变量,而apply([thisObj[,argArray]])中的参数为数组集合
  方法是借给另一个对象的调用去完成任务,原理上是方法执行时上下文对象改变了.

(5)总结

复制代码 代码如下:

var _toS = Object.prototype.toString,
_types = {
'undefined' : 'undefined',
'number' : 'number',
'boolean' : 'boolean',
'string' : 'string',
'[object Function]' : 'function',
'[object RegExp]' : 'regexp',
'[object Array]' : 'array',
'[object Date]' : 'date',
'[object Error]' : 'error'
};

function type(o) {
return _types[typeof o] || _types[_toS.call(o)] || (o ? 'object' : 'null');
}

四.数据类型转换
Javascript有两种数据类型的转换方法:
  一种是将整个值从一种类型转换为另一种数据类型(称作基本数据类型转换),
  另一种方法是从一个值中提取另一种类型的值,并完成转换工作。
  基本数据类型转换的如以下三种方法:
    1.转换为字符型:String(); 例:String(678)的结果为"678"
    2.转换为数值型:Number(); 例:Number("678")的结果为678
    3.转换为布尔型:Boolean(); 例:Boolean("aaa")的结果为true
  从一个值中提取另一种类型的值的如以下方法:
    1.提取字符串中的整数:parseInt(); 例:parseInt("123zhang")的结果为123
    2.提取字符串中的浮点数:parseFloat(); 例:parseFloat("0.55zhang")的结果为0.55

  
另外总结各种类型转换的方法

  
Number转化成字符串:String(number) 、
  Number.toString(2/8/16);//分别代表二进制\八进制\十六进制默认(无参)10进制 、
     toFixed(3) //保留小数点后3位
      toExponextial(3); //小数点前1位, 小数点后3位如var n=123456.789; n.toExponextial(3);//1.234e+5即1.234X105
   toPrecision(4); //返回指定位数 如果位数不够完全显示,则按指数表示法(3个方法都会4舍5入)
 五.其他总结(容易忽视掉的东西)
1.parseInt的陷阱
以下部分摘自《Javascript精粹》:
parseInt是一个将字符串转换为整数的函数。它遇到非数字时停止解析,所以parseInt("16")与parseInt("16 tons")产生相同的结果。如果该函数提示我们出现了额外文本就好了,但是它不会那么做。
如果该字符串第一个字符时0,那么该字符串将被基于八进制而不是十进制来求值。在八进制中,8和9不是一个数字,所以parseInt("08")和parseInt("09")产生0作为结果。这个错误导致程序解析日期和时间时出现问题。幸运的是,parseInt可以接受一个基数作为参数,如此一来parseInt("08",10)结果为8.我建议你总是提供这个基数参数。
另外。下面这个会显示1:
  
alert(parseInt(0.0000001));
这是由于超过一定精度js就会用科学计数法记录数字,例如:
  
alert(0.0000001);
会得到1e-7,而parseInt会自动把参数转换成字符串的,那实际上就是:
  

复制代码 代码如下:

s = (0.0000001).toString();
alert(parseInt(s));

最后得到1就不奇怪了。
  使用parseInt必须记住里面参数是转换成字符串再做转换的。

时间: 2024-12-02 18:04:30

Javascript学习笔记一 之 数据类型_基础知识的相关文章

JavaScript学习笔记之JS对象_基础知识

默认对象 日期对象Date, 格式:日期对象名称=new Date([日期参数]) 日期参数: 1.省略(最常用): 2.英文-数值格式:月 日,公元年 [时:分:秒] 如:today=new Date("October 1,2008 12:00:00") 3.数值格式:公元年,月,日,[时,分,秒] 如:today=new Date(2008,10,1) 日期对象的方法: 格式:日期对象名称.方法([参数]) 使用例子: 复制代码 代码如下: <body>     <

JavaScript学习笔记之内置对象_基础知识

JS Window 窗口对象:http://www.w3school.com.cn/js/js_window.asp 所有浏览器都支持window对象.它表示浏览器窗口. 所有 JavaScript 全局对象.函数以及变量均自动成为window对象的成员. 窗口对象的属性和方法格式: [window.]属性 [window.]方法(参数) 甚至 HTML DOM 的 document 也是 window 对象的属性之一: window.document.getElementById("heade

JavaScript 学习笔记(十一)_基础知识

document对象 下表列出了BOM的document对象的一些通用属性: 属    性 说    明 alinkColor 激活的链接的颜色,如<body alink="color">定义的* bgColor 页面的背景颜色,如<body bgcolor="color">定义的* fgColor 页面的文本颜色,如<body text="color">定义的* lastModified 最后修改页面的日期,

JavaScript学习笔记之JS函数_基础知识

函数就是包裹在花括号中的代码块,前面使用了关键词function: 复制代码 代码如下: function functionName() {     这里是要执行的代码 } 函数参数 函数的参数可以任意多个,不用声明变量类型,只用给出变量名: 复制代码 代码如下: function myFunction(name, job) {     这里是要执行的代码 } 函数返回值 在函数中使用return语句,函数会停止执行,返回调用它的地方. 函数的返回值也不用声明类型,直接返回即可. 复制代码 代码

JavaScript学习笔记之Cookie对象_基础知识

JavaScript Cookie Cookie对象: Cookie是一种以文件的形式保存在客户端硬盘的Cookies文件夹中的用户数据信息(Cookie数据). Cookie文件由所访问的Web站点建立,以长久的保存客户端与Web站点间的会话数据,并且该Cookie数据只允许被所访问的Web站点进行读取. Cookie文件的格式: NS:Cookie.txt IE:用户名@域名.txt 有两种类型的cookie: (1)持久性cookie,会被存储到客户端的硬盘上. (2)会话Cookie:不

JavaScript学习笔记之Function对象_基础知识

在JavaScript中,函数function就是对象. JS中没有方法重载 在JavaScript中,没有方法(函数)重载的概念. 例子: 复制代码 代码如下: <html>        <head>               <script type="text/javascript">               function add(number)               {                     alert(n

javascript学习笔记(十一) 正则表达式介绍_基础知识

1.修饰符 . 任意一个字符 * 匹配*前面0个或多个字符 + 匹配+前面一个或多个字符 ? 匹配?前面0个或1个字符 ^ 以^后面的字符为前导 $ 以$前面的字符结尾 [] 匹配[]内的一个字符 () 分组,可以用\1 \2提取 [^] 匹配^后的以外的字符 {n} {n}前的字符有n个,n为正数 {n,} {n,}前的字符至少有n个,n为正数 {n,m} {n,m}前的字符有n~m个,n,m为正数 2.字符 \d 一个数字 \D 一个非数字 \w 一个字母或数字 \W 一个非字母和非数字 \

JavaScript高级程序设计(第3版)学习笔记12 js正则表达式_基础知识

需要指出的是,这里只是总结了正则表达式的常用的且比较简单的语法,而不是全部语法,在我看来,掌握了这些常用语法,已经足够应对日常应用了.正则表达式不只是应用在ECMAScript中,在JAVA..Net.Unix等也有相应应用,这篇文章则是以ECMAScript中的正则表达式为基础总结的. 一.正则表达式基础 1.普通字符:字母.数字.下划线.汉字以及所有没有特殊意义的字符,如ABC123.在匹配时,匹配与之相同的字符. 2.特殊字符:(需要时,使用反斜杠"\"进行转义) 字符 含义 字

JavaScript高级程序设计(第3版)学习笔记5 js语句_基础知识

砖瓦和水泥都有了,接下来该是砌墙了,在ECMAScript中,语句就是我们需要砌的墙了.语句也和操作符一样,对于有C背景的人来说再自然不过了,下面采用类似的形式整理一下语句的相关知识,重点突出一些ECMAScript中比较特别和个人认为比较有意思的地方,同样,没有强调的但比较基础的语句并非不重要,而是我认为你已经熟悉. 语句一览 语句 语法 简要描述 简单语句  ; 语句以分号(;)结束,在不引起歧义的情况下也可以省略分号. 语句块 {} 使用大括号({})将一组语句放一起组成一个语句块,在EC