javascript 工作必知(四) 类型转换

string和number boolean

javascript 类型会根据赋值的进行转成相应的类型。

        var str = "";
        alert(typeof (str));//string
        str = 5;
        alert(typeof (str));//number
        var sum = str + 5; //+编程两个数字相加
        alert(sum);//10

         这一种比较明显,一眼就可以计算出其值。但是请看下面这种转换

        var sum = "7" + "5";
        alert(typeof (sum)); //string
        alert(sum);//75

var sum = "7" + 5;
              alert(typeof (sum)); //string
              alert(sum);//75

     

     var sum = 5 + "7";
     alert(typeof (sum));//string
     alert(sum);

        var area = "7" * "5";
        alert(typeof (area)); //number
        alert(area);//35

        var sub = "7" - "5";
        alert(typeof (sub)); //number
        alert(sub);//2

        var div = "7" / "5";
        alert(typeof (div));//number
        alert(div);//1.4

  number 类型如果和string 类型"+", 将会直接number转成string

上述中“+” 比较特殊,如果是- 、* 、/ 呢;那么最终会转成什么类型呢。

        var area = "7" * "a";
        alert(typeof (area));//number
        alert(area);//NaN

        var sub = "a" - "7";
        alert(typeof (sub));//number
        alert(sub);//NaN

         sub = "a" - 7;
        alert(typeof (sub));//number
        alert(sub);//NaN

        var div = "7" / "a";
        alert(typeof (div));//number
        alert(div);//NaN

         div = "a" / 7;
        alert(typeof (div));//number
        alert(div);//NaN

  如上 - 、*、/   是number 中算术具有的。string和number是不能进行运算的,所以其值都是NaN。类型number。

        var a = true;
        alert(typeof(a));//boolean
        var b = "true";
        var ab = a + b;
        alert(typeof (ab));//string
        alert(ab); //truetrue
        alert(a == b);//false

      boolean 和 string ,boolean类型自动转成了字符串“true”,但是为什么a不等于b

大家看下这个例子:

        var c = "1";
        alert(typeof(c));//string
        var d = 1;
        alert(typeof (d));//number
        alert(c == d);//true

    这里给出了转换的原则:(供参考)

1. 如果有一个操作数是布尔值,则在比较相等之前将其转换为数值————false转换为0,true转换为1;
      2. 如果一个操作数是字符串,另一个操作符是数值,则在比较相等之前先讲字符串转换为数值;
      3. 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较。

      那么在比较字符串和布尔类型是就会:

发生这样的转换: Boolean true先转成number  1,在转成字符串“1” ,在进行比较。结果肯定是 false 了。

null 和string number Boolean undefined

        var a = null;
        alert(typeof (a));//object

        var b = "hello";
        var ab = a + b;
        alert(typeof (ab));//string
        alert(ab); //nullhello

        var c = 5;
        var ac = a * c;
        alert(typeof (ac)); //number
        alert(ac);//0

        if (a ) //false
        {

        } else
        {
            alert("false");
        }

        var u;

        alert(a == u); //true

  从给出的例子可以看出:

 null 在 string中 自动转成字符串"null" , 在number中表示数字 0,在逻辑判断中相当于false,在值表示时  和undefined 一样。注意是== 而不是===。

     虽然javascript 在进行比较时,== 转换了其比较类型,但是其变量类型并没有因为== 而发生改变。

  

时间: 2025-01-02 18:04:48

javascript 工作必知(四) 类型转换的相关文章

javaScript 工作必知(五) eval 的使用

eval eval(parse) parse :里面跟参数字符串,我们知道执行javascript 会编译执行,    改变全局变量的值: var x = 2; //定义的全局变量 alert(x);//2 var g = eval("x=3"); //eval 会根据当前上下文解析x alert(x);//3    在全局作用域引用eval,改变全局作用域的值,不改变局部作用域的值 var g = eval; //全局引用eval var x = "global"

javaScript 工作必知(六) delete in instanceof

in in 判断  左边 的字符串或者能转换成字符串的是否属于 右边 的属性. var data = { x: 1, y: 4 };//定义了直接对象 alert("x" in data);//true ,x 是data 的一个属性 alert(1 in data);//false ,1 是data的属性值. var arr = [4, 5, 7];//定义了直接数组对象 alert(0 in arr);//true ,arr 数组的index包括0,1,2,0 是他的一个[0]属性.

javaScript 工作必知(三) String .的方法从何而来?

String 我们知道javascript 包括:number,string,boolean,null,undefined 基本类型和Object 类型. 在我的认知中,方法属性应该是对象才可以具有的. var str="hello,world"; var s=str.subString(1,4);//ell alert(typeof(str)+":"+typeof(s));//string:string           从上面的返回类型来看,str是strin

javaScript 工作必知(十) call apply bind

call  每个func 都会继承call apply等方法. function print(mesage) { console.log(mesage); return mesage; } print.call(this, "cnblogs");//cnblogs call(thisAgr,agr1,agr2...) ,call方法第一个传递一个context上下文.后面是参数的个数. apply apply(thisAgr,[agr1,agr2]),apply方法和call的用法一样

JavaScript 工作必知(九)function 实参和形参

大纲 Function Caller 返回函数调用者 Callee 调用自身 function 函数格式 function getPrototyNames(o,/*optional*/ a) { a = a || []; for(var p in o) { a.push(p); } return a; } caller func.caller 返回函数调用者 function callfunc() { if(callfunc.caller) { alert(callfunc.caller.toS

javaScript 工作必知(八) 属性的特性 值、写、枚举、可配置

属性的特性 每个对象都拥有属性,属性具有哪些特性呢? 1.属性具有值.  2.属性是否是可写的.            3.是否是可枚举的.            4.是否是可配置的.   "use strict";//使用严格模式 var descriptor = Object.getOwnPropertyDescriptor({ x: 1 }, "x");//获取匿名对象的值 alert("value:" + descriptor.value

javaScript 工作必知(七) 对象继承

对象继承inherit var o = { r: 1 }; var c = function f() { }; c.prototype = o; c.r = 3; alert(o.r);//被继承的属性值未发生改变. alert(c.r);//c中r覆盖了o中的属性.     如何调用o中的r属性呢. var o = { r: 1 }; var c = function f() { }; c.prototype = o; alert(o.r);//1 被继承的属性值未发生改变. alert(c.

javaScript 工作必知(二) null 和undefined

null null 表示个“空” , 使用typeof (null) ;//Object ; 说明他是一个特殊的对象. null 类型只自己唯一个成员.他是不包含属性和方法的. undefined undefined 同样也是表示"空", 使用typeof (undefined) ;//undefined ;说明他是undefined类型的. undefined 类型只包含自己一个成员,他不包含属性和方法的. summary null 和 undefined 在莫种意义上可以一样 ,比

How Javascript works (Javascript工作原理) (十四) 解析,语法抽象树及最小化解析时间的 5 条小技巧

个人总结:读完这篇文章需要15分钟,文章介绍了抽象语法树与js引擎解析这些语法树的过程,提到了懒解析--即转换为AST的过程中不直接进入函数体解析,当这个函数体需要执行的时候才进行相应转换.(因为有的函数体只是声明了,并没有实际被调用) 解析,语法抽象树及最小化解析时间的 5 条小技巧 这是 JavaScript 工作原理的第十四章. 概述 我们都知道运行一大段 JavaScript 代码性能会变得很糟糕.代码不仅仅需要在网络中传输而且还需要解析,编译为字节码,最后运行.之前的文章讨论了诸如 J