b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

什么是隐式类型转换?js隐式类型转换的介绍

电脑杂谈  发布时间:2019-05-31 23:14:20  来源:网络整理

js强制类型转换_c强制转换数据类型_php 强制转换string

本篇文章给大家带来的内容是关于什么是隐式类型转换?js隐式类型转换的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

JavaScript的数据类型非常弱,在使用算术运算符时,运算符两边的数据类型可以是任意的,比如,一个字符串可以和数字相加。之所以不同的数据类型之间可以做运算,是因为JavaScript引擎在运算之前会悄悄的把他们进行了隐式类型转换的,如下是数值类型和布尔类型的相加:

3 + true; 
// 结果:4

结果是一个数值型!如果是在C或者Java环境的话,上面的运算会因为运算符两边的数据类型不一致而导致报错,但是,在JavaScript中,只有少数情况下,错误类型才会导致出错,比如调用非函数,或者读取null或者undefined的属性时,如下:

"hello"(1); 
//结果: error: not a function
null.x; 
// 结果:error: cannot read property 'x' of null

多数情况下,JavaScript都不会出错的,而是自动的进行相应的类型转换。比如-, *, /,和%等算术运算符都会把操作数转换成数字的,但是“+”号就有点不一样了,有些情况下,它是算术加号,有些情况下,是字符串连接符号,具体的要看它的操作数,如下:

2 + 3; 
//结果: 5
"hello" + " world"; 
// 结果:"hello world"

但是,如果字符串和数字相加,JavaScript会自动把数字转换成字符的,不管数字在前还是字符串在前,如下:

"2" + 3; 
// 结果:"23"
2 + "3";
 //结果: "23"

字符串和数字相加结果是字符串!

js强制类型转换_php 强制转换string_c强制转换数据类型

需要注意的是,“+”的运算方向是从左到右的,如下:

1 + 2 + "3"; 
// "33"

这与下面是等价的:

(1 + 2) + "3"; 
// "33"

相比之下,下面的结果是不一样的:

1 + "2" + 3; 
// "123"

但是,隐式类型转换,有时候,会隐藏一些错误的,比如,null会转换成0,undefined会转换成NaNjs强制类型转换。需要注意的是,NaN和NaN是不相等的(这是由于浮点数的精度决定的),如下:

var x = NaN;
x === NaN; // false

虽然,JavaScript提供了isNaN来检测某个值是否为NaN,但是,这是不太精确的,因为在调用isNaN函数之前,本身就存在了一个隐式转换的过程,它会把那些原本不是NaN的值转换成NaN的,如下:

isNaN("foo"); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN({ valueOf: "foo" }); // true

php 强制转换string_c强制转换数据类型_js强制类型转换

上面代码,我们使用isNaN来测试后,发现字符串,undefined,甚至对象,结果都返回真!!!但是他们不是NaN。

总而言之:isNaN检测NaN并不可靠!!!

有一种可靠的并且准确的方法可以检测NaN。

我们都知道,只有NaN是自己不等自己的,可以使用不等于号(!==)来判断一个数是否等于自身,从而,可以检测到NaN了,如下:

var a = NaN;
a !== a; // true
var b = "foo";
b !== b; // false
var c = undefined;
c !== c; // false
var d = {};
d !== d; // false
var e = { valueOf: "foo" };
e !== e; // false

我们也可以把这种模式定义成一个函数,如下:

function isReallyNaN(x) {
    return x !== x;
}

对象是可以转换成原始值的,最常见的方法就是把它转换成字符串,如下:

"the Math object: " + Math; // "the Math object: [object Math]"
"the JSON object: " + JSON; // "the JSON object: [object JSON]"

对象转换成字符串是调用了他的toSting函数的,你可以手动的调用它来检测一下:

c强制转换数据类型_php 强制转换string_js强制类型转换

Math.toString(); // "[object Math]"
JSON.toString(); // "[object JSON]"

类似的,对象也是可以转换成数字的,他是通过value Of函数的,当然,你也可以自定义这个value Of函数,如下:

"J" + { toString: function() { return "S"; } }; // "JS"
2 * { valueOf: function() { return 3; } }; // 6

如果$foo表示一个对象(比如一个整型对象),velocity会调用它的.tostring()方法将该对象转换为string对象。注:此处有个例外,即date类型的对象,它会先调用tostring()方法,后调用valueof()方法。假如这里有一个对象表示为$foo (例如一个整数对象), 当velocity调用它时,velocity会调用它的.tostring()方法转化为字符串.。

var obj = {
    toString: function() {
        return "[object MyObject]";
    },
    valueOf: function() {
        return 17;
    }
};
"object: " + obj; // "object: 17"

一般的,尽可能使value Of和toString表示的值相同(尽管类型可以不同)。

最后一种强制类型转换,我们常常称之为“真值运算”,比如,if, ||, &&,他们的操作数不一定是布尔型的额。JavaScript会通过简单的转换规则,将一些非布尔类型的值转换成布尔型的。大多数的值都会转换成true,只有少数的是false,他们分别是:false, 0, -0, "", NaN, null, undefined,因为存在数字和字符串以及对象的值为false,所以,直接用真值转换来判断一个函数的参数是否传进来了,这是不不太安全的。比如,有一个可以具有默认值得可选参数的函数,如下:

function point(x, y) {
if (!x) {
    x = 320;
}
if (!y) {
    y = 240;
}
    return { x: x, y: y };
}

这个函数会忽略任何的真值为假的参数的,包括0,-0;

point(0, 0); // { x: 320, y: 240 }

js强制类型转换_c强制转换数据类型_php 强制转换string

检测undefined的更加准确的方法是用typeof操作:

function point(x, y) {
if (typeof x === "undefined") {
    x = 320;
}
if (typeof y === "undefined") {
    y = 240;
}
    return { x: x, y: y };
}

这种写法,可以区分开0和undefined的:

point(); // { x: 320, y: 240 }
point(0, 0); // { x: 0, y: 0 }

另外一种方法是利用参数跟undefined作比较,如下:

if (x === undefined) { ... }

总结:

1. 类型错误有可能会被类型转换所隐藏。

(4)两串中一个串长是另一个串长(包括串长为1仅有一个字符的情况)的数倍,而且长串就好象是由数个短串经过连接操作得到的。所有的字符都可以用转义字符来表示,方法是反斜杠加三位八进制数字表示的ascii码,也可以用反斜杠加x加两位十六进制数字表示。有多种方式表示文件中的信息,若用0,1码表示字符的方法,即每个字符用唯一的一个0,1串表示。

3. 对象通过value Of方法,把自己转换成数字,通过toString方法,把自己转换成字符串js强制类型转换

4.具有value Of方法的对象,应该定义一个相应的toString方法,用来返回相等的数字的字符串形式。

例如在待检测脚本中有些变量仅在脚本的一处等式中出现,未参与其他的运算,就可以将该变量直接进行清除,或者待检测脚本中的变量赋值语句均为常量运算,可以直接将该变量作为常量运算。如果要引用在页面上已经定义好的这个val01变量,则应该这么写:如果是据此定义一个新变量,则如下:加减法运算: 其中num1是定义在后台的一个整型数。先看第一种方式,也就是简单的使用“=”号,在“=”左侧是变量,右侧是变量的值,右侧变量的值可以定义在文件的任何一处,也就是说,右侧中的变量不一定非要是已定义好的值,其也可以使用后面定义的值。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-102763-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...