function isMobile() {
  // 检查屏幕宽度,假定平板或更大尺寸的设备宽度大于 756px
  if (window.innerWidth > 756) {
    return false;
  }

  // 用户代理关键字列表,可以根据需要增减
  var mobileKeywords = ["Android", "webOS", "iPhone", "iPad", "iPod", "BlackBerry", "IEMobile", "Opera Mini"];

  // 检查用户代理字符串是否包含上述任一关键字
  var userAgent = navigator.userAgent || navigator.vendor || window.opera;
  for(var i = 0; i < mobileKeywords.length; i++) {
    if (userAgent.indexOf(mobileKeywords[i]) > -1) {
      return true;
    }
  }

  // 特别针对Windows平板的检测,因为它们可能在用户代理中不包含上述关键字
  if (/windows phone/i.test(userAgent)) {
    return true;
  }

  // 最后,额外考虑小尺寸的设备可能是手机
  return window.innerWidth <= 756;
}

这个版本的isMobile函数先通过屏幕宽度简单排除大部分非移动设备,然后使用用户代理字符串中特定的关键字来进一步确认。这样,即使是小屏幕的平板或对折设备,在用户代理中没有出现对应的移动设备关键字的情况下,也不会被误判为手机。
由于设备和浏览器环境的不断变化,这种方法仍然不是完全准确的,但它比仅仅基于屏幕尺寸的判断更加灵活和准确些。在实际应用中,可能还需要根据具体情况调整关键字列表或判断逻辑。

none
元素永远不会成为鼠标事件的target (en-US)。但是,当其后代元素的pointer-events属性指定其他值时,鼠标事件可以指向后代元素,在这种情况下,鼠标事件将在捕获或冒泡阶段触发父元素的事件侦听器。

<ul>
  <li><a href="https://developer.mozilla.org/">MDN</a></li>
  <li><a href="http://example.com">example.com</a></li>
</ul>
a[href="http://example.com"]
{
  pointer-events: none;
}

onblur:事件会在对象失去焦点时发生

onfocus:是onblur 相反事件 。

onKeyup: 表示键盘每输完一个字符之后触发,就是键盘上的按键被放开时。

函数参数的使用细节,能够提升函数应用的灵活度。

  // 设置参数默认值
  function sayHi(name="小明", age=18) {
    document.write(<p>大家好,我叫${name},我今年${age}岁了。</p>);
  }
  // 调用函数
  sayHi();
  sayHi('小红');
  sayHi('小刚', 21);

总结:

  1. 声明函数时为形参赋值即为参数的默认值
  2. 如果参数未自定义默认值时,参数的默认值为 undefined
  3. 调用函数时没有传入对应实参时,参数的默认值被当做实参传入
        // 语法结构:条件表达式? 表达式1:表达式2
        // 执行思路:如果条件表达式为真,则返回表达式1的值,如果假,返回2的值
        var num = 1;
        var result = num < 5 ? '是的' : '不是';//我们知道表达式是有返回值的
        console.log(result);
        var time = prompt('请输入0—59之间的一个数字')
        var result = time < 10 ? '0' + time : time;
        alert(result);
<input type="text" id="input-text" value="测试内容">
<button id="clear-btn">清空</button>
document.getElementById('clear-btn').addEventListener('click', function() {
  document.getElementById('input-text').value = '';
});

当用户点击清空按钮时,会触发 click 事件,执行代码中的匿名函数。该函数会选中 id 为 input-text 的输入框,并将其 value 属性设置为空。这样,就可以实现点击清空按钮时清空 input 输入框的功能。

参考:https://www.5axxw.com/questions/simple/jxvd96


//检测指定字符串是否存在
//当检查字符串中是否出现特定的子字符串时,正确的检查方法是测试返回值是否为 - 1:
        console.log("Blue Whale".indexOf("Blue") != -1);// true;在 'Blue Whale' 中找到 'Blue'
        console.log("Blue Whale".indexOf("Red") != -1);// false;'Blue Whale' 中不存在 'Bloe'

        // 下面的例子使用 indexOf() 来定位字符串 "Brave new world" 中的子字符串。
        const str = "Brave new world";
        console.log(str.indexOf("w")); // 8
        console.log(str.indexOf("new")); // 6

        // 字符串的索引从零开始:字符串的第一个字符的索引为 0,字符串的最后一个字符的索引为字符串长度减 1。
        "Blue Whale".indexOf("Blue"); // 返回  0
        "Blue Whale".indexOf("Blute"); // 返回 -1
        "Blue Whale".indexOf("Whale", 0); // 返回  5
        "Blue Whale".indexOf("Whale", 5); // 返回  5
        "Blue Whale".indexOf("Whale", 7); // 返回 -1
        "Blue Whale".indexOf(""); // 返回  0
        "Blue Whale".indexOf("", 9); // 返回  9
        "Blue Whale".indexOf("", 10); // 返回 10
        "Blue Whale".indexOf("", 11); // 返回 10

        // 使用 indexOf() 统计一个字符串中某个字母出现的次数
        const str = "To be, or not to be, that is the question.";
        let count = 0;
        let position = str.indexOf('e');
        // for (i = 1; i <= str.length; i++) {
        //     if (position != -1) {
        //         count++;
        //         position = str.indexOf('e', position + 1)
        //     }
        // }
        while (position != -1) {
            count++;
            position = str.indexOf("e", position + 1)
        }
        console.log(count);