当一位同事向我展示这一行警告42时,我感到很困惑.
alert(2+?40);
Run Code Online (Sandbox Code Playgroud)
事实证明,看起来像减号的实际上是一个神秘的Unicode字符,具有明显不同的语义.
这让我想知道为什么该字符在解析表达式时不会产生语法错误.我还想知道是否有更多的人物表现得像这样.
Java 8引入了默认方法,以提供扩展接口的能力,而无需修改现有实现.
我想知道,当该方法被覆盖或由于不同接口中的冲突默认实现不可用时,是否可以显式调用方法的默认实现.
interface A {
default void foo() {
System.out.println("A.foo");
}
}
class B implements A {
@Override
public void foo() {
System.out.println("B.foo");
}
public void afoo() {
// how to invoke A.foo() here?
}
}
Run Code Online (Sandbox Code Playgroud)
考虑到上面的代码,你会如何A.foo()
从B类方法调用?
我需要在Javascript中比较两个数值相等.值也可以NaN
.我想出了这段代码:
if (val1 == val2 || isNaN(val1) && isNaN(val2)) ...
Run Code Online (Sandbox Code Playgroud)
这工作正常,但它看起来很臃肿.我想让它更简洁.有任何想法吗?
我开始使用的所有浏览器都允许id="myDiv"
通过简单地编写来访问元素:
myDiv
Run Code Online (Sandbox Code Playgroud)
见这里:http://jsfiddle.net/L91q54Lt/
无论如何,这种方法似乎记录很少,事实上,我遇到的来源甚至没有提及,而是假设有人会使用
document.getElementById("myDiv")
Run Code Online (Sandbox Code Playgroud)
或者可能
document.querySelector("#myDiv")
Run Code Online (Sandbox Code Playgroud)
即使在事先知道其ID(即不在运行时计算)时也要访问DOM元素.我可以说,后者的方法具有保持代码安全的优势,如果有人无意中尝试myDiv
在更广泛的范围内重新定义(虽然不是这么好的想法......),用一些不同的值覆盖它并继续而没有注意到冲突.
但其他那个呢?除了代码设计之外,使用上面的简短形式是否有任何问题,或者我在这里缺少什么?
我有一个搜索输入文本,我想focus()
在加载页面时应用一个,问题是该focus
函数自动滚动到这个字段.任何禁用此滚动的解决方案?
<input id="search_terms" type="text" />
<script>
document.getelementbyId('search-terms').focus();
</script>
Run Code Online (Sandbox Code Playgroud) 我想测试JavaScript对象是否是代理.琐碎的方法
if (obj instanceof Proxy) ...
Run Code Online (Sandbox Code Playgroud)
在这里不起作用,也没有遍历原型链Proxy.prototype
,因为所有相关操作都得到了底层目标的有效支持.
是否可以测试任意对象是否是代理?
今天我偶然发现了一些我甚至无法编译的Java代码.减少到最低限度,它看起来像这样:
import java.util.List;
interface A {
<T> List<String> foo();
}
interface B {
<T> List<Integer> foo();
}
class C implements A, B {
@Override
public List<?> foo()
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
乍一看,类型参数<T>
的foo
的方法A
和B
自看起来不必要T
,不使用其他任何地方.无论如何,我发现这在允许冲突的返回值类型在同一个实现中共存起着至关重要的作用:如果<T>
省略了一个或两个,则代码不会编译.这里的非工作版本:
import java.util.List;
interface A {
List<String> foo();
}
interface B {
List<Integer> foo();
}
class C implements A, B {
@Override
public List<?> foo()
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我不需要修复上面的代码片段,因为这些只是我用来解释我的观点的例子.我只是很想知道编译器为什么表现不同.有人可以解释一下这些规则究竟有什么不同吗?
我想知道是否有一种简单的方法可以在Windows批处理文件中执行分支,具体取决于单个表达式的值.类似于C,C++,C#,Java,JavaScript,PHP和其他真实编程语言中的switch/case块的东西.
我唯一的解决方法是一个简单的if/else块,其中重复检查相同的表达式是否与不同的值相等:
IF "%ID%"=="0" (
REM do something
) ELSE IF "%ID%"=="1" (
REM do something else
) ELSE IF "%ID%"=="2" (
REM do another thing
) ELSE (
REM default case...
)
Run Code Online (Sandbox Code Playgroud)
如此愚蠢.有更好的解决方案吗?
我想更好地理解当Java编译器遇到如下方法的调用时会发生什么.
<T extends AutoCloseable & Cloneable>
void printType(T... args) {
System.out.println(args.getClass().getComponentType().getSimpleName());
}
// printType() prints "AutoCloseable"
Run Code Online (Sandbox Code Playgroud)
我很清楚,<T extends AutoCloseable & Cloneable>
在运行时没有类型,因此编译器可以做出最少的错误,并创建一个类型为两个边界接口之一的数组,丢弃另一个.
无论如何,如果切换接口的顺序,结果仍然是相同的.
<T extends Cloneable & AutoCloseable>
void printType(T... args) {
System.out.println(args.getClass().getComponentType().getSimpleName());
}
// printType() prints "AutoCloseable"
Run Code Online (Sandbox Code Playgroud)
这导致我做了一些调查,看看接口发生变化时会发生什么.在我看来,编译器使用某种严格的顺序规则来决定哪个接口是最重要的,并且接口在代码中出现的顺序不起作用.
<T extends AutoCloseable & Runnable> // "AutoCloseable"
Run Code Online (Sandbox Code Playgroud)
<T extends Runnable & AutoCloseable> // "AutoCloseable"
Run Code Online (Sandbox Code Playgroud)
<T extends AutoCloseable & Serializable> // "Serializable"
Run Code Online (Sandbox Code Playgroud)
<T extends Serializable & AutoCloseable> // "Serializable"
Run Code Online (Sandbox Code Playgroud)
<T extends SafeVarargs & Serializable> // "SafeVarargs"
Run Code Online (Sandbox Code Playgroud)
<T extends Serializable …
Run Code Online (Sandbox Code Playgroud) 这更像是一种好奇心.在处理多语言Web应用程序时,我注意到在块元素末尾的某些字符(如标点符号(!?.;,))被渲染为好像它们被放置在开头而不是写入方向是从右到左(因为我不会说某些亚洲语言的情况).
换句话说,字符串
Hello, World!
Run Code Online (Sandbox Code Playgroud)
呈现为
!Hello, World
Run Code Online (Sandbox Code Playgroud)
当放在div块中时 direction: rtl
如果文本被分成两部分并给出不同的颜色,则这变得更加明显:最后一个连续的文本块呈现在两个分开的区域中:
这种行为有什么意义?我想这必须是(所有?)从右到左语言的特性,这是由浏览器自动处理的,所以我不需要关心它,或者我应该这样做?
javascript ×5
java ×3
html ×2
interface ×2
batch-file ×1
comparison ×1
css ×1
dom ×1
ecmascript-6 ×1
equality ×1
generics ×1
inheritance ×1
java-8 ×1
jls ×1
nan ×1
scroll ×1
unicode ×1