Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

6-28 强制类型转换 #13

Open
CaptainLiao opened this issue Jun 28, 2017 · 0 comments
Open

6-28 强制类型转换 #13

CaptainLiao opened this issue Jun 28, 2017 · 0 comments

Comments

@CaptainLiao
Copy link
Owner

CaptainLiao commented Jun 28, 2017

值类型转换

类型转换发生在静态类型语言的编译阶段,而强制类型转换则发生在动态类型语言的运行时。

而在Javascript中统称为强制类型转换,可通过隐式强制类型转换和显示强制类型转换来区分。

var a = 42;
var b = a + ""; // 隐式强制类型转换
var c = String( a ); // 显式强制类型转换

假值列表

  • null
  • undefined
  • +0 -0 NaN
  • false
  • "" ''

显示强制类型转换

字符串与数字

var a = 42;
var b = String( a );
var c = "3.14";
var d = Number( c );

// 除此之外,还有
var a = 42;
var b = a.toString();
var c = "3.14";
var d = +c;
b; // "42"
d; // 3.14

上例中 +c 是 + 运算符的一元(unary)形式(即只有一个操作数)。 + 运算符显式地将 c 转
换为数字,而非数字加法运算

1 日期转换为数字

var d = +new Date( "Mon, 18 Aug 2014 08:53:06 CDT" );
d; // 1408369986000

2 奇特的 ~运算符(即字位操作“非”)

~ 返回 2 的补码。

~x 大致等同于 -(x+1) 。很奇怪,但相对更容易说明问题:~42; // -(42+1) ==> -43

用处一: ~ 和 indexOf() 一起可以将结果强制类型转换(实际上仅仅是转换)为真 / 假值:

var a = "Hello World";
~a.indexOf( "lo" ); // -4 <-- 真值!
if (~a.indexOf( "lo" )) { // true
// 找到匹配!
}
~a.indexOf( "ol" ); // 0 <-- 假值!
!~a.indexOf( "ol" ); // true
if (!~a.indexOf( "ol" )) { // true
// 没有找到匹配!
}

如果 indexOf(..) 返回 -1 , ~ 将其转换为假值 0 ,其他情况一律转换为真值。

用处二:字位截除

~~ 中的第一个 ~ 执行 ToInt32 并反转字位,然后第二个 ~ 再进行一次字位反转,即将所有字位反转回原值,最后得到的仍然是 ToInt32 的结果
~~-49.6; // -49

**记住:**永远给parseInt()设置第二个参数。

@CaptainLiao CaptainLiao changed the title 6-28 值类型转换 6-28 强制类型转换 Jun 28, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant