进入一个有趣的问题.我正在努力尝试切换分配给变量的布尔值.它没有用,最终我尝试了这段代码.
var status = false;
console.log(!status);
Run Code Online (Sandbox Code Playgroud)
我希望它能true在控制台中提供,但我得到了false.我认为javascript会首先在括号内运行代码以找到它的值,然后在console.log中运行该值.你能解释一下为什么我没有true在控制台中获得价值吗?
所以我刚开始学习 javascript,我现在在函数模块中,我正在玩它,突然我遇到了一个疑问:
为什么是这样:
if(x==true){
return 1;
}
Run Code Online (Sandbox Code Playgroud)
与此不同:
if(x){
return 1;
}
Run Code Online (Sandbox Code Playgroud)
?
你看,我有这个代码:
function isAdult(age){
if(age >= 18){
return true;
}
return false;
}
function nameAndAge(string, boolean){
if(boolean == true){
var my_string = string + " is adult";
return my_string
}
var my_string = string + " is under age";
return my_string
}
var talisa_age = 22;
var talisa_name = "Talisa Maegyr";
var status = isAdult(talisa_age);
var str = nameAndAge(talisa_name,status);
console.log(str)
Run Code Online (Sandbox Code Playgroud)
无论“talisa_age”值如何,我都会得到以下输出:
"Talisa Maegyr is under age"
Run Code Online (Sandbox Code Playgroud)
但是,如果我将 nameAndAge …
是否可以在没有with(global)所有脚本默认具有的隐式上下文的情况下执行代码块?例如,在浏览器中,是否可以通过任何方式设置脚本,使诸如
const foo = location;
Run Code Online (Sandbox Code Playgroud)
抛出
未捕获ReferenceError:未定义位置
而不是访问window.location,何时location未先声明?缺少这一点,有没有办法使这种隐式引用导致某种警告?在编写代码时,它可能是错误的来源(见下文),因此有一种防范它的方法可能会很有用。
(当然,由于普通的作用域规则,可以使用const或let或在内部块中声明另一个具有相同名称的变量,以确保使用该变量名称引用的是新变量而不是global属性,但这不是一样。)
这可能类似于询问是否可以从实际 with语句中停止引用属性:
const obj = { prop: 'prop' };
with (obj) {
// how to make referencing "prop" from somewhere within this block throw a ReferenceError
}
Run Code Online (Sandbox Code Playgroud)
众所周知,with不应该首先使用它,但是不幸的是,当谈到时,我们似乎别无选择with(global),因为它偶尔会节省一些字符,但会浪费一些经常弹出的错误:1 2 3 4 5 6。例如:
const foo = location;
Run Code Online (Sandbox Code Playgroud)
(这里的问题:window.status是保留属性-分配给它时,它会将分配的表达式强制转换为字符串)
with阻止或禁止显式使用此类错误的原因相同,但with(global)即使在严格模式下,隐式错误也继续引起问题,因此找出解决方法将非常有用。
我知道null是falsy.那它为什么表现得好像呢truthy?
var status = null;
console.log('status:', status);
if(!!status) {
console.log('status is truthy'); // it should not print
}
if(!!null) {
console.log('null is truthy'); // it should not print
}Run Code Online (Sandbox Code Playgroud)
我想做一些非常简单的事 - 在Javascript中初始化一个数组.它不适用于谷歌浏览器.这是代码:
status = [];
for(i=0; i < 8; i++)
status[i]=false;
alert(status.length); //It says 0 when it should say 8
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?
我知道这一定是非常基本的东西,但我不了解范围是如何工作的。我希望closed整个 JavaScript 文件都知道该变量。
我有类似的东西(在 jQuery 中):
\n\nvar closed = 0;\n\n$(function(){\n console.log(closed);\n});\nRun Code Online (Sandbox Code Playgroud)\n\n但closed被记录为false. load我用和函数尝试了很多东西onload,但失败了。
我已将我的错误缩小到以下一组在Google Chrome中产生不同行为的代码:
示例代码:http://jnvxxx.appspot.com/rpc/static_server?key_ = testjs.html
Firefox输出:Hi 1 [object Object] 192 Hi 2
Chrome输出:Hi 1 [object Object] undefined嗨2
任何想法都可以获得谷歌浏览器中的属性.
谢谢.
我不知道为什么,但下面的代码适用于Firefox,但不适用于谷歌Chrome,为什么?这应该是标准的JS.
status = parseInt($('#input-status').val());
// status field is exactly equals to 0
if (status === 0) {
// do something, in Firefox the code reaches here, in Chrome NOT !
}
Run Code Online (Sandbox Code Playgroud)
以下是如何在html中定义#input-status:
<input type="hidden" id="input-status" name="input-status" value="00">
Run Code Online (Sandbox Code Playgroud)
在Chrome中,代码仅在我替换=== by ==时才有效.
有任何想法吗 ?