zoukankan      html  css  js  c++  java
  • javascript的类型、值和变量

    js的类型有多种分类,原始类型(数值,字符串,布尔值,null,undefined)和对象类型(object,String,Number,RgbExp等),或者是拥有方法的类型(object,String,Number,RgbExp,数值,字符串,布尔值等)和没有方法的类型(null,undefined)等。

    js变量是无类型的,也即变量可以被赋予任何类型的数值。

    js对数字的操作:

    不区分整数值和浮点数值,js中的所有数都是使用的浮点数表示的,能够表示的数值范围(-900719925470992~9007199254700992),超过此范围,js就无法保证低位数的精度。js用Infinity表示正无穷,用—Infinity表示负无穷,用NaN表示非数字

    算术运算:加(+)减(-)乘(*)除(/)求余(%),除此之外还有借助Math对象来实现的

         Math.pow(2,1)  //2的53次幂

         Math.round(2.4)//四舍五入 

         Math.ceil(2.4) //向上取整

              Math.floor(2.4) //向下取整

            Math.abs(-3) //绝对值

          Math.min(2,1)//最小值

          Math.max(2,1) //最大值

          Math.exp(2) //e的2次幂

          Math.random() //生成一个0到1之间的随机数

          Math.PI//圆周率

          Math.E//自然对数的底数

    二进制浮点数和四舍五入错误

      js采用的二进制浮点数,因此有限多个实数,因此大多数的js表示的实数都只是近似值,比如0.3-0.1和0.2-0.1不相等,因此在进行js运算时,要尽量避免浮点数的相加减。

    将数字转换成字符串:

    可以简单地调用toString(c1)方法,且此方法接受一个可选的参数,c1代表转换基数。比如var n = 17;n.toString(2) = 10001;当c1不存在时,默认的转换基数为10;另外Number为数字转换成字符串的机制设置了三种方式,分别是

    toFixed(c1)c1代表保留小数的位数,这种方式,不会转换成科学计数法

    toExponential(c1)c1代表有效位数,这种方式采用科学计数法

    toPrecision(c1)c1代表有效位数,当c1小于n的整数位数时,采用科学计数法,反之采用直接转换法 

    js对字符串的操作:

    将字符串转换为数字:

    Number()这种方式可以将数字字符串转换成整数或浮点数字面量,基数只能是10,并且,字符串中不能包含其他的非法字符后缀

    parseInt()只解析字符串中的整数,如果有前缀o,则解析成8进制,有前缀0x,则解析成 16进制

    parseFloat()可以解析字符串的浮点数

    parseInt()和parseFloat()在解析字符串的时候,如果第一个非空格字符是非法的数字直接量(比如“.8”、"abc89"),都会返回NaN。

    字符串前直接加“+”或“-”这种方式可以将数字字符串转换成整数或浮点数字面量,基数只能是10,并且,字符串中不能包含其他的非法字符后缀

    另外补充加号的作用及用法(

    作用:

    1.正数表示法

    2.相加符号

    3.字符串之间的连接符

    用法:

    1、如果+(加号)两边都是数字,则肯定是加法运算

    2、如果+两边有boolean、number类型或null值的某一个,则是加法运算,比如:1+true是2,true+true也是2,null+false是0,1+null是1

    3、如果加号两边有最少一边是字符串,则是字符串拼按,比如1+”abcd”

    4、如果加号两边最少有一边是是对象类型,这个对象先对象它的toString方法,然后再做字符串拼接,比如:(这些涉及到一些对象的原理性的东西,先做简单了解,以           后会讲)5+[1,2,3,4]  是51,2,3,4   比如({}+{})是 "[object Object][object Object]"

    5、数字、布尔、null和undefined做加运算的结果是NaN。

     对象转换为原始值:

    toString(),函数、数组、正则、时间对象都可以使用这个方法转换成相对应的字符串。

    valueOf()很多对象使用这个方法会放回对象本身,而不是原始值。时间类型的对象会返回毫秒数。

    对象到字符串的转换会首先考虑toString(),再考虑valueOf();而对象到数值的转换,会首先考虑valueOf(),再考虑toString()

    js对变量的操作:

    js的预编译规则,是当处理器首次扫描文档时,首先会将声明的参数、函数、变量名(值为undefined)放入内存,(声明提前)然后再从上到下执行上下文。其中执行变量值的优先级是函数—>参数—>变量名 。看下面的例子:

    1.下面这个例子中,第一个a是因为 ,当执行到函数时,此时函数内部定义了局部变量,所以在函数预编译的时候,先是将变量a(值为undefined)存入内存,当执行上下文到alert(a)的时候,a=undefined;第二个a就是全局a;

    var a = 1;
    function fn1() {
    alert( a ); //underfined
    var a = 2;
    }
    fn1();
    alert( a ); //1
    2.下面这个例子中,第一个a是因为,当执行到函数的时候,函数内部没有定义a,此时沿着作用域链向上查找到全局的a=1;第二个a是因为 在函数内部的定义的a是全局变量,在执行了fn1()之后,a=2的值取代了a=1的值

    var a = 1;

    function fn1() {
    alert( a );// 1
    a = 2;
    }
    fn1();
    alert( a ); //2

    3.当存在参数时,因为执行到函数的时候,由于js的预编译中,优先级是函数大于参数大于变量,所以使得第一个a=function a(){ }而不是3
    var a = 3;
    function test( a ){
    alert( a ); //function a(){ }
    var a = 123; 
    function a(){ }
    alert( a ); //123
    }
    test(a); 
    下面是一些例子:
    例1.

    var a = 1;

    function fn1() {
    alert( a );//1
    a = 2;
    }
    fn1(a);
    alert(a);//2;

    例2.

    var a = 10;
    function aaa() {
    alert( a );
    }
    function bbb() {
    var a = 20;
    aaa();
    }
    bbb();//10
    例3.
    function a(i) {
    alert(i);//10
    alert(arguments[0]); //arguments[0]应该就是形参 i     //10
    var i = 2;
    alert(i);//2
    alert(arguments[0]);//2
    };
    a(10);



  • 相关阅读:
    [Eclipse]GEF入门系列(四、其他功能)
    [Eclipse]GEF入门系列(三、应用实例)
    [Eclipse]GEF入门系列(一、Draw2D)
    打开Win2000的自动补齐功能
    让URLConnection使用代理服务器
    [Eclipse]GEF入门系列(序)
    给表格的单元格增加编辑功能(In place edit)
    设置Eclipse RCP程序的外观和首选项
    利用winrar自动备份重要资料(续,经验技巧)
    终于换了新电脑
  • 原文地址:https://www.cnblogs.com/zhuzhenzhen/p/4508692.html
Copyright © 2011-2022 走看看