码迷,mamicode.com
首页 > 编程语言 > 详细

《Javascript权威指南》类型、值、变量

时间:2015-03-21 15:18:06      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

 

变量

数据类型分为  原始类型  和  对象类型  

原始类型包括数字、字符串和布尔值  

null  和  undefined  分别表示格子特殊类型的唯一的成员    

除此之外就是对象。对象(object)是属性的集合,每个属性由名值对组成  

普通的javascript对象是“命名值”的无序集合。数组是特殊的对象,表示带编号的值的有序集合。    

函数是具有与它相关联的可执行代码的对象,都是真值。   如果函数用来初始化(new运算符),一个新创建的对象,称为构造函数。每个构造函数定义了一类(class)对象————  

由构造函数初始化的对象组成的集合,类可以看做是对象类型的子类型。  

除了数组类、和函数类,还有日期类、正则类、和错误类。   数字、布尔值、null和undefined属于不可变类型。  

 

 数字

  负号是一元求反运算符,并不是数字直接量语法的组成部分。    

通过Math对象的属性定义的函数和常量实现复杂的算数运算  

Math.pow(2,8)     2的8次幂   

Math.round(.6)            四舍五入   

Math.ceil(.6)             向上取整   

Math.floor(.6)            想下取整   

Math.abs(-5)              取绝对值   

Math.max(x,y,z)           返回最大值   

Math.min(x,y,z)           返回最小值   

Math.random()             生成一个大于等于0小于1的伪随机数   

Math.PI                   圆周率   

Math.E                    自然对数的底数   

Math.sqrt(3)              求平方根   

Math.pow(3,13)           3的立方根  

Math.sin(0)               三角函数   

Math.log(10)              10的自然对数   

Math.log(100)

Math.LN10   以10为底100的对数   

Math.exp(3)               e的三次幂  

 

  

下溢是当运算结果无限接近0并比javascript能表示的最小值还小的时候发生的情况。这时会返回0。当负数发生下溢时会返回负零、    

零除以零的结果是非数字值,用NaN表示。无穷大除以无穷大、给任意负数开方运算或  

算术运算符与不是数字或无法转换为数字的操作数一起使用时  都返回NaN  

NaN不与任何值相等,包括它自身   当且仅当x=NaN时,x!=x成立  

isNaN()检测参数是否是非数值;isFinite()参数不是NaN、Infinity或-Infinity时返回true    

javascript采用二进制表示法,不能准确表示类似0.1的数字       

var x = 0.3 - 0.2;      0.09999999999999998        

var y = 0.2 - 0.1;      0.1         

x == y;                 false     

 

Date构造函数用了创建表示日期和时间的对象  

var then = new Date(2015, 3, 10);   

var now = new Date();                当前日期和时间   

var elapsed = now - then;            日期减法,计算时间间隔的毫秒数   

now.getFullYear();                   2015

now.getMonth(); 从0开始计算的月数 now.getDate(); 从1开始计算的天数 now.getDay(); 星期,0代表星期日 now.getHovers(); 当前小时

 

文本

 转义字符  

如果\后不符合转义字符,则忽略\  

+用于字符串时表示连接  

字符串的length属性表示其长度    

 

布尔值  

下列值会被转换为false  

undefined null NaN 0 -0 ""  其他值都会转换成true

 

null 和 undefined  

null是特殊的对象值,含义是非对象、  

undefined表示变量没有初始化

包装对象

存取字符串、数字或布尔值的属性时创建的临时对象成为包装对象 读取它们的属性值时和对象一样,但给属性赋值时会忽略这个操作 只要引用了字符串的属性,javascript就会将字符串通过调用new String()的方法转换成对象,这个对象继承了字符串的方法。    

var s = ‘test‘;    

s.len = 4;          //创建一个临时字符串对象,赋值后就销毁    

var t = s.len;    

alert(t);           //undefined

 

字符串、数字、布尔值的属性都是只读,不能给它们定义新属性

var s = ‘test‘;                    

var S = new String(‘test‘);    

alert(typeof(s));               //string    

alert(typeof(S));               //object    

alert(s==S);                    //true    

alert(s===S);                   //false

 

原始值(undefined null 数字 字符串 布尔值)是不可更改的,任何方法都无法更改原始值

通常将对象称为引用类型,对象的比较均是引用的比较,当且仅当它们引用同一个基对象时才相等

取得对象或数组的副本,需要显式复制

var a = [1, 2, 3];

var b = [];

for (var i = 0; i < a.length; i++) {    

b[i] = a[i];

}

 

比较两个独立的对象或数组,需要比较它们的属性或元素

function equalArrays(a, b) {    

if (a.length != b.length)

return false;    

for (var i = 0; i < a.length; i++) {

        if a[i] != b[i] return false;    

}

    return true;

}

 

类型转换

Boolean() Number() String() Object()

除了 null 和 undefined 外任何值都有 toString()方法

x + ""  //等价于String(x)

+x      //等价于Number(x)

!!x     //等价于Boolean(x)

 

Number类

toString()          可接受基数 以下方法都四舍五入

toFixed()           根据小数点后的位数将数字转换为字符串,不使用指数计数法

toExponential()     用指数计数法转换为字符串,小数点后位数由参数决定

toPrecision()       根据指定的有效数字位数将数字转换为字符串

parseInt()      只解析整数,跳过任意的前导空格,如果第一个非空格字符是非法的数字直接量,返回NaN,可以接收第二个参数作为基数

parseFloat()    解析整数和负数

parseInt(‘  44a4‘)  //44

parseInt(‘$11‘)     //NaN

parseInt(‘-5‘)      //-5

 

所有对象继承了两个转换方法:toString()和 valueOf()

toString()返回一个反映这个对象的字符串。 数组类将每个数组元素转换为一个字符串,并在元素之间添加逗号后合并成结果字符串 函数类返回这个函数的实现定义的表示方法

valueOf()一般返回对象本身,日期类会返回它的内部表示:1970年1月1日以来的毫秒数

      var a = function (){

        document.write(‘hh‘);

      };

       alert(typeof(a.valueOf()));  //function

      var a = new Date();

      alert(typeof(a.valueOf()));

 

+的其中一个操作数是对象,则会将其转换为原始值

      var a = new Date();

      typeof(a+1);          //string

      typeof(a-1);          //number

 

函数作用域

变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的

    function text(o) {

        var i = 1;

        if (typeof o == "object") {

            var j = 0;

            for (var k = 0; k < 10; k++) {

                console.log(k);

            }

        }

        console.log(j);                     //0

        console.log(k);                     //10     }          //i j k在函数体内均有定义

 

变量提前:函数里声明的所有变量(不涉及赋值)都被“提前”到函数体的顶部

    var a = ‘aa‘;

    function f(o) {

        console.log(a);     //undefined

        var a = ‘bb‘;

        console.log(a);     //bb

    }

 

    在函数体内局部变量覆盖了同名全局变量,但只有在程序执行到var语句时才被赋值,等价于Boolean

    function f(o) {

        var a;

        console.log(a);

        a = ‘bb‘;

        console.log(a);
     }

 

声明全局变量实际上是定义了全局对象的一个属性。使用var声明变量时这个变量无法通过delete删除

《Javascript权威指南》类型、值、变量

标签:

原文地址:http://www.cnblogs.com/surahe/p/4355509.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!