数据类型:
Number属性
-
两个可表示(representable)数之间的最小间隔。
-
JavaScript 中最大的安全整数 (
253 - 1)。 -
能表示的最大正数。最小的负数是
-MAX_VALUE。 -
JavaScript 中最小的安全整数 (
-(253 - 1)). -
能表示的最小正数即最接近 0 的正数 (实际上不会变成 0)。最大的负数是
-MIN_VALUE。 -
特殊的“非数字”值。
-
特殊的负无穷大值,在溢出时返回该值。
-
特殊的正无穷大值,在溢出时返回该值。
-
Number 对象上允许的额外属性。
Number方法
-
确定传递的值是否是 NaN。
-
确定传递的值类型及本身是否是有限数。
-
确定传递的值类型是“number”,且是整数。
-
确定传递的值是否为安全整数 ( -
(253 - 1)至253 - 1之间)。 -
计算传递的值并将其转换为整数 (或无穷大)。
-
和全局对象
parseFloat()一样。 -
和全局对象
parseInt()一样。
String属性
-
可以为 String 对象增加新的属性。
String方法
-
通过一串 Unicode 创建字符串。
-
通过一串 码点 创建字符串。
-
通过模板字符串创建字符串。
String实例属性
-
String.prototype.constructor用于创造对象的原型对象的特定的函数。
-
返回了字符串的长度。
-
N
用于访问第N个位置的字符,其中N是小于
length和 0之间的正整数。这些属性都是“只读”性质,不能编辑。
String实例跟HTML无关的方法
-
返回特定位置的字符。
-
返回表示给定索引的字符的Unicode的值。
-
String.prototype.codePointAt()返回使用UTF-16编码的给定位置的值的非负整数。
-
连接两个字符串文本,并返回一个新的字符串。
-
判断一个字符串里是否包含其他字符串。
-
判断一个字符串的是否以给定字符串结尾,结果返回布尔值。
-
从字符串对象中返回首个被发现的给定值的索引值,如果没有找到则返回-1。
-
String.prototype.lastIndexOf()从字符串对象中返回最后一个被发现的给定值的索引值,如果没有找到则返回-1。
-
String.prototype.localeCompare()返回一个数字表示是否引用字符串在排序中位于比较字符串的前面,后面,或者二者相同。
-
使用正则表达式与字符串相比较。
-
返回调用字符串值的Unicode标准化形式。
-
在当前字符串尾部填充指定的字符串, 直到达到指定的长度。 返回一个新的字符串。
-
在当前字符串头部填充指定的字符串, 直到达到指定的长度。 返回一个新的字符串。
-
设置嵌入引用的引号类型。
-
返回指定重复次数的由元素组成的字符串对象。
-
被用来在正则表达式和字符串直接比较,然后用新的子串来替换被匹配的子串。
-
对正则表达式和指定字符串进行匹配搜索,返回第一个出现的匹配项的下标。
-
摘取一个字符串区域,返回一个新的字符串。
-
通过分离字符串成字串,将字符串对象分割成字符串数组。
-
判断字符串的起始位置是否匹配其他字符串中的字符。
-
通过指定字符数返回在指定位置开始的字符串中的字符。
-
返回在字符串中指定两个下标之间的字符。
-
String.prototype.toLocaleLowerCase()根据当前区域设置,将符串中的字符转换成小写。对于大多数语言来说,
toLowerCase的返回值是一致的。 -
String.prototype.toLocaleUpperCase()根据当前区域设置,将字符串中的字符转换成大写,对于大多数语言来说,
toUpperCase的返回值是一致的。 -
String.prototype.toLowerCase()将字符串转换成小写并返回。
-
返回一个对象文字代表着特定的对象。你可以使用这个返回值来创建新的对象。重写
Object.prototype.toSource方法。 -
返回用字符串表示的特定对象。重写
Object.prototype.toString方法。 -
String.prototype.toUpperCase()将字符串转换成大写并返回。
-
从字符串的开始和结尾去除空格。参照部分 ECMAScript 5 标准。
-
从字符串的左侧去除空格。
-
从字符串的右侧去除空格。
-
返回特定对象的原始值。重写
Object.prototype.valueOf方法。 -
String.prototype[@@iterator]()返回一个新的迭代器对象,该对象遍历字符串值的索引位置,将每个索引值作为字符串值返回。
Boolean构造器
-
创建一个新的
Boolean对象。
Boolean实例方法
-
根据对象的值返回字符串
"true"或"false"。 重写Object.prototype.toString()方法。 -
返回
Boolean对象的原始值。 重写Object.prototype.valueOf()方法。
symbol属性
-
Symbol.length长度属性,值为0。
-
symbol构造函数的原型。
众所周知的 symbols
除了自己创建的symbol,JavaScript还内建了一些在ECMAScript 5 之前没有暴露给开发者的symbol,它们代表了内部语言行为。它们可以使用以下属性访问:
-
迭代 symbols
-
一个返回一个对象默认迭代器的方法。被
for...of使用。 -
一个返回对象默认的异步迭代器的方法。被
for await of使用。 -
正则表达式 symbols
-
一个用于对字符串进行匹配的方法,也用于确定一个对象是否可以作为正则表达式使用。被
String.prototype.match()使用。 -
一个替换匹配字符串的子串的方法. 被
String.prototype.replace()使用。 -
一个返回一个字符串中与正则表达式相匹配的索引的方法。被
String.prototype.search()使用。 -
一个在匹配正则表达式的索引处拆分一个字符串的方法.。被
String.prototype.split()使用。 -
其他 symbols
-
一个确定一个构造器对象识别的对象是否为它的实例的方法。被
instanceof使用。 -
一个布尔值,表明一个对象是否应该flattened为它的数组元素。被
Array.prototype.concat()使用。 -
拥有和继承属性名的一个对象的值被排除在与环境绑定的相关对象外。
-
一个用于创建派生对象的构造器函数。
-
一个将对象转化为基本数据类型的方法。
-
用于对象的默认描述的字符串值。被
Object.prototype.toString()使用。
symbol方法
-
使用给定的key搜索现有的symbol,如果找到则返回该symbol。否则将使用给定的key在全局symbol注册表中创建一个新的symbol。
-
从全局symbol注册表中,为给定的symbol检索一个共享的?symbol key。
Symbol 原型
所有 Symbols 继承自 Symbol.prototype.
symbol原型属性
-
Symbol.prototype.constructor返回创建实例原型的函数. 默认为
Symbol函数。 -
一个包含symbol描述的只读字符串。
symbol原型方法
-
返回包含
Symbol对象源码的字符串。覆盖Object.prototype.toSource()方法。 -
返回包含Symbol描述符的字符串。 覆盖
Object.prototype.toString()方法。 -
返回
Symbol对象的初始值.。覆盖Object.prototype.valueOf()方法。 -
Symbol.prototype[@@toPrimitive\]返回
Symbol对象的初始值。
Object
object描述
Object 构造函数为给定值创建一个对象包装器。如果给定值是 null 或 undefined,将会创建并返回一个空对象,否则,将返回一个与给定值对应类型的对象。
当以非构造函数形式被调用时,Object 等同于 new Object()。
Object 构造函数的属性
-
Object.length值为 1。
-
可以为所有 Object 类型的对象添加属性。
Object 构造函数的方法
-
通过复制一个或多个对象来创建一个新的对象。
-
使用指定的原型对象和属性创建一个新对象。
-
给对象添加一个属性并指定该属性的配置。
-
给对象添加多个属性并分别指定它们的配置。
-
返回给定对象自身可枚举属性的
[key, value]数组。 -
冻结对象:其他代码不能删除或更改任何属性。
-
Object.getOwnPropertyDescriptor()返回对象指定的属性配置。
-
返回一个数组,它包含了指定对象所有的可枚举或不可枚举的属性名。
-
Object.getOwnPropertySymbols()返回一个数组,它包含了指定对象自身所有的符号属性。
-
返回指定对象的原型对象。
-
比较两个值是否相同。所有 NaN 值都相等(这与==和===不同)。
-
判断对象是否可扩展。
-
判断对象是否已经冻结。
-
判断对象是否已经密封。
-
返回一个包含所有给定对象自身可枚举属性名称的数组。
-
防止对象的任何扩展。
-
防止其他代码删除对象的属性。
-
设置对象的原型(即内部
[[Prototype]]属性)。 -
返回给定对象自身可枚举值的数组。
Object 实例和 Object 原型对象
JavaScript中的所有对象都来自 Object;所有对象从Object.prototype继承方法和属性,尽管它们可能被覆盖。例如,其他构造函数的原型将覆盖 constructor 属性并提供自己的 toString() 方法。Object 原型对象的更改将传播到所有对象,除非受到这些更改的属性和方法将沿原型链进一步覆盖。
object原型对象属性
-
特定的函数,用于创建一个对象的原型。
-
指向当对象被实例化的时候,用作原型的对象。
-
Object.prototype.__noSuchMethod__当未定义的对象成员被调用作方法的时候,允许定义并执行的函数。
object原型对象方法
-
Object.prototype.__defineGetter__()关联一个函数到一个属性。访问该函数时,执行该函数并返回其返回值。
-
Object.prototype.__defineSetter__()关联一个函数到一个属性。设置该函数时,执行该修改属性的函数。
-
Object.prototype.__lookupGetter__()返回使用
__defineGetter__定义的方法函数 。 -
Object.prototype.__lookupSetter__()返回使用
__defineSetter__定义的方法函数。 -
Object.prototype.hasOwnProperty()返回一个布尔值 ,表示某个对象是否含有指定的属性,而且此属性非原型链继承的。
-
Object.prototype.isPrototypeOf()返回一个布尔值,表示指定的对象是否在本对象的原型链中。
-
Object.prototype.propertyIsEnumerable()判断指定属性是否可枚举,内部属性设置参见 [ECMAScript [Enumerable]] attribute 。
-
返回字符串表示此对象的源代码形式,可以使用此字符串生成一个新的相同的对象。
-
Object.prototype.toLocaleString()直接调用
toString()方法。 -
返回对象的字符串表示。
-
移除对象某个属性的监听。
-
返回指定对象的原始值。
-
给对象的某个属性增加监听。
function
function描述
使用 Function 构造器生成的 Function 对象是在函数创建时解析的。这比你使用函数声明或者函数表达式并在你的代码中调用更为低效,因为使用后者创建的函数是跟其他代码一起解析的。
所有被传递到构造函数中的参数,都将被视为将被创建的函数的参数,并且是相同的标示符名称和传递顺序。
以调用函数的方式调用 Function 的构造函数(而不是使用 new 关键字) 跟以构造函数来调用是一样的。
function属性和方法
全局的 Function 对象没有自己的属性和方法,但是,因为它本身也是一个函数,所以它也会通过原型链从自己的原型链 Function.prototype 上继承一些属性和方法。
function原型对象属性
-
以数组形式获取传入函数的所有参数。此属性已被
arguments替代。 -
用于指定的函数的参数的个数,但已被删除。使用
length属性代替。 -
获取调用函数的具体对象。
-
获取函数的接收参数个数。
-
获取函数的名称。
-
获取函数的display name。
-
Function.prototype.constructor声明函数的原型构造方法,详细请参考
Object.constructor。
function原型对象方法
-
在一个对象的上下文中应用另一个对象的方法;参数能够以数组形式传入。
-
bind()方法会创建一个新函数,称为绑定函数.当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为 this,传入 bind()方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数.
-
在一个对象的上下文中应用另一个对象的方法;参数能够以列表形式传入。
-
Function.prototype.isGenerator()若函数对象为generator,返回true,反之返回false。 -
获取函数的实现源码的字符串。 覆盖了
Object.prototype.toSource方法。 -
获取函数的实现源码的字符串。覆盖了
Object.prototype.toString方法。
function实例
Function 实例从 Function.prototype 继承了一些属性和方法。 同其他构造函数一样, 你可以改变构造函数的原型从而使得所有的 Function 实例的属性和方法发生改变。
array
array描述
数组是一种类列表对象,它的原型中提供了遍历和修改元素的相关操作。JavaScript 数组的长度和元素类型都是非固定的。因为数组的长度可随时改变,并且其数据在内存中也可以不连续,所以 JavaScript 数组不一定是密集型的,这取决于它的使用方式。一般来说,数组的这些特性会给使用带来方便,但如果这些特性不适用于你的特定使用场景的话,可以考虑使用类型数组 TypedArray。
只能用整数作为数组元素的索引,而不能用字符串。后者称为关联数组。使用非整数并通过方括号或点号来访问或设置数组元素时,所操作的并不是数组列表中的元素,而是数组对象的属性集合上的变量。数组对象的属性和数组元素列表是分开存储的,并且数组的遍历和修改操作也不能作用于这些命名属性。
Array属性
-
Array
构造函数的 length 属性,其值为1(注意该属性为静态属性,不是数组实例的 length 属性)。 -
返回
Array构造函数。 -
通过数组的原型对象可以为所有数组对象添加属性。
Array方法
-
从类数组对象或者可迭代对象中创建一个新的数组实例。
-
用来判断某个变量是否是一个数组对象。
-
根据一组参数来创建新的数组实例,支持任意的参数数量和类型。
数组实例
所有数组实例都会从 Array.prototype 继承属性和方法。修改 Array 的原型会影响到所有的数组实例。
数组实例属性
-
Array.prototype.constructor -
上面说了,因为
Array.prototype也是个数组,所以它也有length属性,这个值为0,因为它是个空数组。
数组实例方法
修改器方法
下面的这些方法会改变调用它们的对象自身的值:
-
在数组内部,将一段元素序列拷贝到另一段元素序列上,覆盖原有的值。
-
将数组中指定区间的所有元素的值,都替换成某个固定的值。
-
删除数组的最后一个元素,并返回这个元素。
-
在数组的末尾增加一个或多个元素,并返回数组的新长度。
-
颠倒数组中元素的排列顺序,即原先的第一个变为最后一个,原先的最后一个变为第一个。
-
删除数组的第一个元素,并返回这个元素。
-
对数组元素进行排序,并返回当前数组。
-
在任意的位置给数组添加或删除任意个元素。
-
在数组的开头增加一个或多个元素,并返回数组的新长度。
访问方法
下面的这些方法绝对不会改变调用它们的对象的值,只会返回一个新的数组或者返回一个其它的期望值。
-
返回一个由当前数组和其它若干个数组或者若干个非数组值组合而成的新数组。
-
判断当前数组是否包含某指定的值,如果是返回
true,否则返回false。 -
连接所有数组元素组成一个字符串。
-
抽取当前数组中的一段元素组合成一个新数组。
-
返回一个表示当前数组字面量的字符串。遮蔽了原型链上的
Object.prototype.toSource()方法。 -
返回一个由所有数组元素组合而成的字符串。遮蔽了原型链上的
Object.prototype.toString()方法。 -
Array.prototype.toLocaleString()返回一个由所有数组元素组合而成的本地化后的字符串。遮蔽了原型链上的
Object.prototype.toLocaleString()方法。 -
返回数组中第一个与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1。
-
返回数组中最后一个(从右边数第一个)与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1。
迭代方法
在下面的众多遍历方法中,有很多方法都需要指定一个回调函数作为参数。在每一个数组元素都分别执行完回调函数之前,数组的length属性会被缓存在某个地方,所以,如果你在回调函数中为当前数组添加了新的元素,那么那些新添加的元素是不会被遍历到的。此外,如果在回调函数中对当前数组进行了其它修改,比如改变某个元素的值或者删掉某个元素,那么随后的遍历操作可能会受到未预期的影响。总之,不要尝试在遍历过程中对原数组进行任何修改,虽然规范对这样的操作进行了详细的定义,但为了可读性和可维护性,请不要这样做。
-
为数组中的每个元素执行一次回调函数。
-
返回一个数组迭代器对象,该迭代器会包含所有数组元素的键值对。
-
如果数组中的每个元素都满足测试函数,则返回
true,否则返回false。 -
如果数组中至少有一个元素满足测试函数,则返回 true,否则返回 false。
-
将所有在过滤函数中返回
true的数组元素放进一个新数组中并返回。 -
找到第一个满足测试函数的元素并返回那个元素的值,如果找不到,则返回
undefined。 -
找到第一个满足测试函数的元素并返回那个元素的索引,如果找不到,则返回
-1。 -
返回一个数组迭代器对象,该迭代器会包含所有数组元素的键。
-
返回一个由回调函数的返回值组成的新数组。
-
从左到右为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值。
-
从右到左为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值。
-
返回一个数组迭代器对象,该迭代器会包含所有数组元素的值。
-
和上面的
values() 方法是同一个函数。
date简介
- 如果没有输入任何参数,则Date的构造器会依据系统设置的当前时间来创建一个Date对象。
- 如果提供了至少两个参数,其余的参数均会默认设置为 1(如果没有指定 day 参数)或者 0(如果没有指定 day 以外的参数)。
- JavaScript的时间由世界标准时间(UTC)1970年1月1日开始,用毫秒计时,一天由 86,400,000 毫秒组成。
Date对象的范围是 -100,000,000 天至 100,000,000 天(等效的毫秒值)。 Date对象为跨平台提供了统一的行为。时间属性可以在不同的系统中表示相同的时刻,而如果使用了本地时间对象,则反映当地的时间。Date对象支持多个处理 UTC 时间的方法,也相应地提供了应对当地时间的方法。UTC,也就是我们所说的格林威治时间,指的是time中的世界时间标准。而当地时间则是指执行JavaScript的客户端电脑所设置的时间。- 以一个函数的形式来调用
Date对象(即不使用new操作符)会返回一个代表当前日期和时间的字符串。
date属性
-
允许为
Date对象添加属性。 -
Date.lengthDate.length的值是 7。这是该构造函数可接受的参数个数。
date方法
-
返回自 1970-1-1 00:00:00 UTC(世界标准时间)至今所经过的毫秒数。
-
解析一个表示日期的字符串,并返回从 1970-1-1 00:00:00 所经过的毫秒数。注意: 由于浏览器差异和不一致,强烈建议不要使用
Date.parse解析字符串。 -
接受和构造函数最长形式的参数相同的参数(从2到7),并返回从 1970-01-01 00:00:00 UTC 开始所经过的毫秒数。
JavaScript Date 实例
所有的 Date 实例都继承自 Date.prototype。修改 Date构造函数的原型对象会影响到所有的 Date 实例。
Date实例属性
-
Date.prototype.constructor返回创建了实例的构造函数,默认是
Date构造函数。
date实例方法Getter
-
根据本地时间返回指定日期对象的月份中的第几天(1-31)。
-
根据本地时间返回指定日期对象的星期中的第几天(0-6)。
-
根据本地时间返回指定日期对象的年份(四位数年份时返回四位数字)。
-
根据本地时间返回指定日期对象的小时(0-23)。
-
Date.prototype.getMilliseconds()根据本地时间返回指定日期对象的毫秒(0-999)。
-
根据本地时间返回指定日期对象的分钟(0-59)。
-
根据本地时间返回指定日期对象的月份(0-11)。
-
根据本地时间返回指定日期对象的秒数(0-59)。
-
返回从1970-1-1 00:00:00 UTC(协调世界时)到该日期经过的毫秒数,对于1970-1-1 00:00:00 UTC之前的时间返回负值。
-
Date.prototype.getTimezoneOffset()返回当前时区的时区偏移。
-
根据世界时返回特定日期对象一个月的第几天(1-31).
-
根据世界时返回特定日期对象一个星期的第几天(0-6).
-
Date.prototype.getUTCFullYear()根据世界时返回特定日期对象所在的年份(4位数).
-
根据世界时返回特定日期对象当前的小时(0-23).
-
Date.prototype.getUTCMilliseconds()根据世界时返回特定日期对象的毫秒数(0-999).
-
Date.prototype.getUTCMinutes()根据世界时返回特定日期对象的分钟数(0-59).
-
根据世界时返回特定日期对象的月份(0-11).
-
Date.prototype.getUTCSeconds()根据世界时返回特定日期对象的秒数(0-59).
-
根据特定日期返回年份 (通常 2-3 位数). 使用
getFullYear().
date实例方法Setter
-
根据本地时间为指定的日期对象设置月份中的第几天。
-
根据本地时间为指定日期对象设置完整年份(四位数年份是四个数字)。
-
根据本地时间为指定日期对象设置小时数。
-
Date.prototype.setMilliseconds()根据本地时间为指定日期对象设置毫秒数。
-
根据本地时间为指定日期对象设置分钟数。
-
根据本地时间为指定日期对象设置月份。
-
根据本地时间为指定日期对象设置秒数。
-
通过指定从 1970-1-1 00:00:00 UTC 开始经过的毫秒数来设置日期对象的时间,对于早于 1970-1-1 00:00:00 UTC的时间可使用负值。
-
根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。
-
Date.prototype.setUTCFullYear()根据世界时设置 Date 对象中的年份(四位数字)。
-
根据世界时设置 Date 对象中的小时 (0 ~ 23)。
-
Date.prototype.setUTCMilliseconds()根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。
-
Date.prototype.setUTCMinutes()根据世界时设置 Date 对象中的分钟 (0 ~ 59)。
-
根据世界时设置 Date 对象中的月份 (0 ~ 11)。
-
Date.prototype.setUTCSeconds()根据世界时设置 Date 对象中的秒钟 (0 ~ 59)。
-
setYear() 方法用于设置年份。请使用
setFullYear()方法代替。
date实例方法 Conversion getter
-
以人类易读(human-readable)的形式返回该日期对象日期部分的字符串。
-
把一个日期转换为符合 ISO 8601 扩展格式的字符串。
-
使用
toISOString()返回一个表示该日期的字符串。为了在JSON.stringify()方法中使用。 -
返回一个基于 GMT (UT) 时区的字符串来表示该日期。请使用
toUTCString()方法代替。 -
Date.prototype.toLocaleDateString()返回一个表示该日期对象日期部分的字符串,该字符串格式与系统设置的地区关联(locality sensitive)。
-
Date.prototype.toLocaleFormat()使用格式字符串将日期转换为字符串。
-
Date.prototype.toLocaleString()返回一个表示该日期对象的字符串,该字符串与系统设置的地区关联(locality sensitive)。覆盖了
Object.prototype.toLocaleString()方法。 -
Date.prototype.toLocaleTimeString()返回一个表示该日期对象时间部分的字符串,该字符串格式与系统设置的地区关联(locality sensitive)。
-
返回一个与
Date等价的原始字符串对象,你可以使用这个值去生成一个新的对象。重写了Object.prototype.toSource()这个方法。 -
返回一个表示该日期对象的字符串。覆盖了
Object.prototype.toString()方法。 -
以人类易读格式返回日期对象时间部分的字符串。
-
把一个日期对象转换为一个以UTC时区计时的字符串。
-
返回一个日期对象的原始值。覆盖了
Object.prototype.valueOf()方法。
正则
regexp构造函数
-
创建一个新的
RegExp对象。
regexp静态属性
-
该构造函数用于创建派生对象。
-
该索引表示从哪里开始下一个匹配
regexp实例属性
-
含有
RegExp对象 flags 的字符串。 -
.是否要匹配新行(newlines)。 -
Whether to test the regular expression against all possible matches in a string, or only against the first.
-
匹配文本的时候是否忽略大小写。
-
是否进行多行搜索。
-
正则表达式的文本。
-
搜索是否是 sticky。
-
Unicode 功能是否开启。
regexp实例方法
-
(Re-)compiles a regular expression during execution of a script.
-
Executes a search for a match in its string parameter.
-
Tests for a match in its string parameter.
-
Performs match to given string and returns match result.
-
RegExp.prototype[@@matchAll]()Returns all matches of the regular expression against a string.
-
Replaces matches in given string with new substring.
-
Searches the match in given string and returns the index the pattern found in the string.
-
Splits given string into an array by separating the string into substring.
-
Returns a string representing the specified object. Overrides the
Object.prototype.toString()method.
null描述
值 null 是一个字面量,不像 undefined,它不是全局对象的一个属性。null 是表示缺少的标识,指示变量未指向任何对象。把 null 作为尚未创建的对象,也许更好理解。在 API 中,null 常在返回类型应是一个对象,但没有关联的值的地方使用。
null 与 undefined 的不同点:
当检测 null 或 undefined 时,注意相等(==)与全等(===)两个操作符的区别 ,前者会执行类型转换
undefined