[,,,].join(", ")
-
some codes:
function foo() { } var oldName = foo.name; foo.name = "bar"; [oldName, foo.name]
var a = new Date("epoch")
-
some codes:
var a = Function.length, b = new Function().length a === b
[,,,].join(", ")
some codes:
function foo() { }
var oldName = foo.name;
foo.name = "bar";
[oldName, foo.name]
var a = new Date("epoch")
some codes:
var a = Function.length, b = new Function().length
a === b
[,,,]
虽然是有三个逗号,但它是三个元素,数组字面量最后一个逗号如果没有内容就会被忽略,[1,2,3,]和[1,2,3]是一样的。三个元素join的时候,会只用两个分隔符插值,比如[1,2,3].join()
的时候会变成"1,2,3"
,最后一个元素不会被插入分隔符。
函数的name这个属性,修饰符定义为{configurable:false,enumerable:false,writable:false}
,意思是不可删、枚举不到、不可该写,你如何前面加"use strict"
;就会发现foo.name = "bar"
这句会提示TypeError,函数的name在定义的时候就已经被指定了,所以这里都是"foo"
Date构造器如果碰到无法解析成时间的字符串时,都会返回Invalid Date
,注意这还是一个Date
,拥有正常Date
的所有方法,比如getTime()
、getDay()
之类的
一个函数的length,和它被定义的时候有关,举个例子function sum(a,b){}
这个函数在定义的时候指定了两个参数,所以sum.length
也等于2。new Function()
生成了一个空函数,类似于function abc(){}
,它的length的默认值自然就是0了Function
作为一个构造函数,本身也是一个函数,它的length为1,这个可以参见ES5规范文档。
结果肯定是 ['foo','foo']了。
Function.name
是只读的,代表了函数的名称。匿名函数名称为 ''
,例如:
function mew(){}
var meo=function(){};
console.log(mew.name); // 'mew'
console.log(meo.name); // ''
var
表达式应该是undefined
吧。这里的a是Invalid Date
或者是NaN
(IE下吧)
Function.length
是函数参数的个数,new Function()
则是定义了一个“空”的函数,当然参数个数为零,而Function
本身的构造函数参数是不固定的,但Function.length
的返回值被定义为1
,所以这个表达式的结果为false。
上面的解答没有查文档,如果希望了解更详细的内容,可以Google一下相关的关键词。
1 . 将数组元素用逗号相连(串连),[1,2,3].join(',')结果“1,2,3”,注意最后面没有逗号。
2 . foo.name是函数的名字,所以oldName是"foo",你可以试下将一个匿名函数赋值给foo
var foo = function() {};
var oldName = foo.name;
foo.name = "bar";
[oldName, foo.name];
3 . 构造一个Date对象,似乎是无效的; 如果要获得当前的时间,可以用“new Date()"
var d = new Date();
// 获得unixtime
d.getTime();
4 . 是比较对象的长度么?
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
[,,,]
返回的是一个[undefinedx3]
的数组。为什么是3个而不是4个,那是因为最后一个逗号因为最后一个元素没有被定义而被忽略了,类似于[1,2,3,]
。至于对此空数组做连接就不多表,有图有真相。返回结果还是
['foo','foo']
,因为ECMA规定了foo.name
这个值是可读不可写的。返回
Invaild Date
。Date类解析字符串时间的格式是使用Date.parse
函数的,关于函数支持的时间字符串格式 MDN 上有详细的说明,具体不多表,有图有真相。返回
false
。这个问题等同于问Function.length === Function.prototype.length
。一个是Function
自己参数的长度,一个是通过Function
构造函数继承过来参数的长度。至于答案为什么分别是1和0,MDN上也有比较清楚的说明: