导演大卫·林奇是当代美国非主流电影的代表人物。
他的影片以华丽、阴郁、诡异夹带着黑色幽默的风格在影坛独树一帜。
他往往在公路片的形式格局中,
运用弗洛伊德的心理分析,
展示出现代人焦虑郁闷的精神症候。
其在现实与超现实之间的自由游走,
对暴力和性的大胆表现,
前卫奇异、极具视觉冲击力的影像,
都使他的作品散发出独特的个人魅力。
他执导的《穆赫兰道》、《我心狂野》、《象人》、《双峰》等作品都已成为经典。
定义
- = 赋值
- == 相等
- === 严格相等
相同点
它们两个运算符都允许任意类型的的操作数,如果操作数相等,返回true,否则返回false。
不同点
==:运算符称作相等,用来检测两个操作数是否相等,这里的相等定义的非常宽松,可以允许进行类型转换。两边类型不同,比较时会先进行隐式转换,再比较。
===:用来检测两个操作数是否严格相等,两边的量与量的类型必须完全相同。
比较过程
双等号==
- 如果两个值类型相同,再进行三个等号(===)的比较
- 如果两个值类型不同,也有可能相等,需根据以下规则进行类型转换在比较:
- 如果一个是 null,另一个是 undefined,那么相等
- 如果一个是字符串,另一个是数值,把字符串转换成数值之后再进行比较
- 如果一个是布尔型,另一个是数值,把布尔值转换成数值之后再进行比较
- 如果一个是字符串或者数值,另一个是对象,把对象转换成原始值再进行比较
- NaN与所有值相比都是false
| x | y | 结果 |
|---|---|---|
| null | undefined | true |
| Number | String | x==Number(y) |
| Boolean | any | Number(x)==y |
| Object | String/Number | toPrimitie(x)==y |
| otherwise | otherwise | false |
不同类型数据Number()后的结果:
| 类型 | 结果 |
|---|---|
| undefined | NaN |
| null | 0 |
| Boolean | true->1 ; false ->0 |
| String | "abc"->NaN ; "123"->123 |
toPrimitie()
| type | Result |
|---|---|
| 基本类型 | 原始值 |
| 对象 | 首先找valueof()属性,如果没有定义,然后尝试找toString()属性 |
toPrimitive方法对于不同类型的返回结果
-
基本类型直接返回,基本类型的值
-
如果是对象类型,分以下几种情况:
- 如果对象的ValueOf方法的结果是原始值,返回原始值
- 如果对象的toString方法返回原始值,就返回这个值
- 其他情况都返回一个错误
示例如下:
100 == "100" // true
1 == true // true
true=="1" // true
true=="01" // true
null == null // true
undefined == undefined // true
null == undefined // true
true == "20" // false
"1" == "01" // false,此处等号两边值得类型相同,不要再转换类型了!
NaN == NaN // false,NaN和所有值包括自己都不相等。
三等号===
- 如果类型不同,就一定不相等
- 如果两个都是数值,并且是同一个值,那么相等;如果其中至少一个是 NaN,那么不相等。(判断一个值是否是 NaN,只能使用 isNaN( ) 来判断)
- 如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等。
- 如果两个值都是 true,或是 false,那么相等
- 如果两个值都引用同一个对象或是函数,那么相等,否则不相等
- 如果两个值都是 null,或是 undefined,那么相等
示例如下:
100 === "100" // false
1 === true // false
NaN === NaN // false
null === undefined // false
'abc' === "abc" // true
false === false // true
null === null // true
undefined === undefined // true