在表达式中使用?:附加到Javascript字符串会出现意外行为

时间:2016-12-02 09:43:42

标签: javascript ternary-operator

$ find . -regextype posix-extended -regex "\./\w+\.(json)"

其中

var aString = "test ";

aString = aString + true?"Appended":"No Append";  // 'Appended'

到底发生了什么?

3 个答案:

答案 0 :(得分:3)

第一种情况将if (Build.VERSION.SDK_INT >= 25) { ShortcutManager shortcutManager = getSystemService(ShortcutManager.class); ShortcutInfo leaveShortcut = new ShortcutInfo.Builder(this, "shortcut_leave") .setShortLabel("Leave Manager") .setLongLabel("Leave Manager") .setIcon(Icon.createWithResource(this, R.drawable.app_icon)) .setIntents( new Intent[]{ new Intent(Intent.ACTION_MAIN, Uri.EMPTY, this, LeaveManagerActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK), }) .build(); ShortcutInfo searchShortcut = new ShortcutInfo.Builder(this, "shortcut_search") .setShortLabel("Employee search") .setLongLabel("Employee search") .setIcon(Icon.createWithResource(this, R.drawable.app_icon)) .setIntents( new Intent[]{ new Intent(Intent.ACTION_MAIN, Uri.EMPTY, this, SearchActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK), }) .build(); shortcutManager.setDynamicShortcuts(Arrays.asList(leaveShortcut, searchShortcut)); } 添加到true,然后检查三元。

基本上这是带括号的操作

aString

总体答案是(aString + true) ? "Appended" : "No Append" 优于+的运算符优先级。



?




答案 1 :(得分:1)

我认为在这种情况下,aString + true会在表达式的其余部分之前进行评估。

所以你得到了

if(aString + true) {
    aString = "Appended";
}

你用括号固定,把它变成

if(true) {
    aString = aString + "Appended";
}

答案 2 :(得分:1)

原因是javascript运算符优先级(look