我是ECMAScript 2015(ES6)的新手,我正在阅读ES6中关于时间死区的文章:
if(typeof x === "undefined") {
console.log("x doesn't exist or is undefined");
} else {
// safe to refer to x....
}
let x = 5; //script.js:1 Uncaught ReferenceError: x is not defined
显然,在ES6中,如果在声明变量之前使用typeof测试变量会抛出错误
console.log
不确定这是否是类型记录(2.1.5)或预期行为中的错误,但如果有两个文件在同一个文件夹中声明相同的块级var:
a.js
let x = 0;
b.js
let x = 1;
..。然后用tsc构建它,我得到:
a.ts(1,5):error TS2451:无法重新声明块作用域变量'x‘。
b.ts(1,5):error TS2451:无法重新声明块作用域变量'x‘。
这应该发生吗?或者类型记录有“默认”命名空间的概念,在整个项目中共享吗?
我最初认为这可能与有关,但使用显式命名空间的等效名称空间似乎工作得很好:
c.js
namespace Test {
le
如果你遵循jslint.com的指导方针,它会让你把它们放在函数的顶部,并像这样合并多个语句。
function(){
var foo,
moo,
hoo;
然而,在学习underscore.js和backbone.js时,我发现并没有遵循这个约定,而是根据需要使用它们。例如。例如在_.each()中
for (var key in obj) {
一种方式更具可读性吗?单程更快吗?
我知道javascript没有块作用域。
我正在实现这一点。
//to_s.js
(function(){
String.prototype.to_s = function(){
var str = this.toString();
var convert = function(s){
return eval(s);
};
while(/#{(\w+)}/.test(str)){
// bad because I use eval...
var matchStr =RegExp.$1;
我有一些类似于以下内容的javascript代码:
for (i = 0; i < numTimes; i++) {
DoStuff();
}
function DoStuff() {
for (i = 0; i < 100; i++) {
console.log(i);
}
}
我发现当第二次调用DoStuff()时,循环中的i值从1开始。除了在DoStuff()函数中更改变量名之外,最干净的解决方法是什么,有人能解释这种行为吗?
编辑:谢谢你的回复。似乎JS有“词法范围”而不是“块作用域”。这就是我在这里看到的吗?有人能解释一下在新手术语中什么是词汇范围吗
HTML:
<script type="text/javascript">
var x = "overriden";
</script>
<script src="myjs.js"></script>
myjs.js:
$(document).ready(function(){
var x = x || "default val";
alert(x); // this alerts "default val" and not "overriden&
我让这个myObject在foo.js中修饰,在bar.js中修改。
当getScript完成时,我试着得到结果。但是,如果myObject在jQuery中被删除,它似乎不是一个全局变量。
有人能给我解释一下吗?
foo.js
/*
// this works fine, but I want to decalre it inside jQuery
var myObject = {
str: "hello world",
num: "123"
};
*/
$(function() {
// th
我的代码中有以下几行:
var Y = 1;
var Z = X || Y;
其中,在某些情况下,-X未定义,而Y保持一个值。
尽管我发誓我之前以为它是有效的..
我突然得到“未捕获的ReferenceError: X未定义”。
||运算符不就是为了支持这种情况吗?
它似乎确实适用于:
var X = X || 1;
当X以前从未定义过的时候..
这是由某种JS解析限制造成的吗?我很好奇地想知道。
谢谢
此代码运行良好:
const a = 1;
{
const b = a; // let's use "a" in a sub-scope
}
{
const a = 2; // let's override "a" in another sub-scope
}
..。但是,这段代码在第3行的a is not defined中失败:
const a = 1;
{
const b = a; // let's use "a" in a sub-scope <<< CRASH!! >>&g
这是一个变量定义还是一个声明?为什么?
var x;
在这条语句之后,..and是为x保留的内存吗?
编辑:在C中,int x;是一个声明,int x = 5;是一个定义。JS中的类比是什么?维基百科说,声明分配内存,而定义为这个分配的内存赋值。
第二次编辑:我认为@Deryck的解释听起来很棒,但有一些输出与他的解释不一致:
> var x;
undefined
> x
undefined // now it looks like x is defined to the value undefined
> y
ReferenceError: y is not defined
我使用$.getScript()调用外部文件。在调用变量值时可以传递它吗?
示例:
var passVal = "ch967";
$.getScript(ext.js); //how can I use `passVal` within ext.js
ext.js
if(passVal=="ch967"){
var a = "Relax Chairs"
} else {
var a = "Table Chairs"
}
我试图与Discord.js制造一个不和谐的机器人,但是在我的管理命令中,当试图向表中添加一个播放器时,它会抛出这个错误:
C:\Users\Mark\Desktop\DiscCentral\bot.js:49 if(ServerAdmins1) {^
TypeError: Cannot read property '1' of undefined
at Client.client.on (C:\Users\Mark\Desktop\DiscCentral\bot.js:49:20)
at emitOne (events.js:116:13)
at Client.emit (e
当我单击General Ledger上的Export时,会得到一个错误:未定义
知道我该怎么处理吗?
在我得到的url上添加了debug=assets之后:
http://localhost:8069/web_pdf_preview/static/src/js/web_pdf_preview.js:117
Retraçage :
ReferenceError: pyeval is not defined
at Class.ir_actions_report_xml (http://localhost:8069/web_pdf_preview/static/src/js/web
你好,我是新的JavaScript单元测试,我正在使用Mocha.js和Chai.js
我想要做的只是简单地弄清楚如何检查单独的js文件中全局变量的值。这是我的密码
下面是main.js文件(要测试的代码),它只有我想要测试的变量。
//main.js
var foo = 9;
这是我的测试文件
var assert = require("assert")
var expect = require('chai').expect
var fs = require("fs")
var vm = require("vm")
funct