看来undefined是window/global的一个属性:

我一直认为undefined与null一样,是JavaScript中的uniqe值.
但上面的代码(在Chrome中测试)让我感到困惑.
有人可以解释原因
undefined in window
Run Code Online (Sandbox Code Playgroud)
评估为真,而
null in window
Run Code Online (Sandbox Code Playgroud)
评价为假
从语言设计的角度来看,为什么呢
if ('k' in 42);
Run Code Online (Sandbox Code Playgroud)
抛出TypeError异常
for ('k' in 42);
Run Code Online (Sandbox Code Playgroud)
才不是?
我已经阅读了ECMAScript规范中的以下部分:
有人可以解释这种不一致的理由吗?
为什么不能表达'k' in 42的if (...)只是评估为false?
gvim帮助doc包含"链接",我可以通过按ctrl +跳转到主题如何格式化一个可以像这样运行的文本
我正在阅读CSS2.1规范.我知道"块格式化上下文","内联格式化上下文","表格/网格/弹性格式化上下文".
我想知道,有多少种"格式化背景"?有完整的清单吗?
我使用 VS2005 将 google v8 编译成 v8.lib。我可以在 C++ Builder 2007 中链接它吗?
我写了一些完全没有依赖关系的包,我把这些包放在我的私人 Gitlab 上。我想用yarn add GIT_URL_TO_PACKAGE --module-folder=my_module. 问题是每次我添加一个新包时,yarn都会在package.json. 但我只想安装命令中指定的包。
有没有选择yarn add或一些技巧?
供参考:
我只想"package manager"从我的私人 Gitlab 下载代码并记录包标签/版本/sha1。Yarn只是一个突然出现在我脑海中的工具。如果npm或其他包管理器可以做到这些,我很乐意切换到那个。
为什么
123.toString()
Run Code Online (Sandbox Code Playgroud)
抛出一个SyntaxError
而
123..toString()
Run Code Online (Sandbox Code Playgroud)
不是?
我正在用 TypeScript 编写游戏的基类。它具有发送消息、资源管理等功能。受到Mixins的启发,我编写了以下代码(编译为 JavaScript):
function Messenger(Base) {
return class Messenger extends Base {
$dispatch(e) {
// TODO
}
};
}
function ResourceManager(Base) {
return class ResourceManager extends Base {
$loadRes(key) {
// TODO
return Promise.resolve({});
}
};
}
class Component {
}
class GameBase extends Component {
start() {
console.log('start');
}
init() {
console.log('init');
}
}
const Klass = ResourceManager(Messenger(GameBase));
var gg = new Klass();
gg.start();
Run Code Online (Sandbox Code Playgroud)
据我所知,当我尝试调用 时gg.start,JavaScript 引擎会查找原型链,在这种情况下它会更长一点,并且当 mixins 增长时它会变得很长:

这会减慢方法查找速度吗?V8 是否优化了这个查找过程?我可以忽略查找开销吗?
我试图使用Babel.js将ImportDeclaration插入JavaScript代码段中:
const babel = require('babel-core')
const t = babel.types
const traverse = babel.traverse
const template = babel.template
const generate = require('babel-generator').default
const babylon = require('babylon')
const code = [
"import A from 'a'",
"import B from 'b'",
"export default {",
" components: {",
" },",
" methods: {",
" init () {",
" }",
" }",
"}"
].join("\n")
console.log(code)
const ast = babylon.parse(code, {
sourceType: 'module'
})
var n = []
traverse(ast, {
ImportDeclaration: {
exit(path) {
n.push(path)
}
} …Run Code Online (Sandbox Code Playgroud)在Ruby中,我可以为任何对象定义方法:
jack = "jack"
def jack.say_hi
puts "hi, I'm #{self}"
end
jack.say_hi
Run Code Online (Sandbox Code Playgroud)
是否有可能在Objective-C中做同样的事情?怎么样?
Symbol从编程语言设计的角度来看,Ruby 和 JavaScript(也许其他一些也具有等效类型的编程语言)是否具有相同的目的?(问题#1)
我知道这两种语言都有Symbol类型。
Symbol在这两种语言中都可以用来从对象中检索方法:
const a = [];
a[Symbol.iterator] // [Function: values]
Run Code Online (Sandbox Code Playgroud)
a = []
a.method(:at) => #<Method: Array#at(_)>
Run Code Online (Sandbox Code Playgroud)
Ruby 中的符号是独一无二的:
:a.object_id => 776028
:a.object_id => 776028
Run Code Online (Sandbox Code Playgroud)
在 JavaScript 中,使用创建的符号Symbol.for保存在内部字典中,这使得它类似于unique:
Symbol.for('a') === Symbol.for('a') // true
Run Code Online (Sandbox Code Playgroud)
但Symbol(..)无论参数是什么,总是返回一个新符号:
// Why this is designed this way? Question #2
Symbol('a') === Symbol('a') // false
Run Code Online (Sandbox Code Playgroud) javascript ×6
css ×2
ruby ×2
babeljs ×1
c++ ×1
c++builder ×1
ecmascript-5 ×1
hyperlink ×1
inheritance ×1
mixins ×1
npm ×1
objective-c ×1
typescript ×1
v8 ×1
vim ×1
yarnpkg ×1