关于Web的学习(18.6.5)——javascript篇

1.null,undefined 的区别?

  • null表示一个对象是“没有值”的值,也就是值为“空”;
  • undefined表示一个变量声明了没有初始化(赋值);

  • undefined不是一个有效的JSON,而null是;
  • undefined的类型(typeof)是undefined;
  • null的类型(typeof)是object;

  • Javascript将未赋值的变量默认值设为undefined;
  • Javascript从来不会将变量设为null。它是用来让程序员表明某个用var声明的变量时没有值的。

  • undefined :是一个表示"无"的原始值或者说表示"缺少值",就是此处应该有一个值,但是还没有定义。当尝试读取时会返回 undefined;例如变量被声明了,但没有赋值时,就等于undefined
  • null : 是一个对象(空对象, 没有任何属性和方法);例如作为函数的参数,表示该函数的参数不是对象;

注意:

  • 在验证null时,一定要使用 === ,因为 == 无法分别 null 和 undefined
  • null == undefined // true
  • null === undefined // false

 再来一个例子:

  null
  Q:有张三这个人么?
  A:有!
  Q:张三有房子么?

  A:没有!

  undefined
  Q:有张三这个人么?
  A:有!
  Q: 张三有多少岁?

  A: 不知道(没有被告诉)

参考:undefined与null的区别


2.写一个通用的事件侦听器函数。

// event(事件)工具集,来源:github.com/markyun
markyun.Event = {
    // 页面加载完成后
    readyEvent : function(fn) {
        if (fn==null) {
            fn=document;
        }
        var oldonload = window.onload;
        if (typeof window.onload != 'function') {
            window.onload = fn;
        } else {
            window.onload = function() {
                oldonload();
                fn();
            };
        }
    },
    // 视能力分别使用dom0||dom2||IE方式 来绑定事件
    // 参数: 操作的元素,事件名称 ,事件处理程序
    addEvent : function(element, type, handler) {
        if (element.addEventListener) {
            //事件类型、需要执行的函数、是否捕捉
            element.addEventListener(type, handler, false);
        } else if (element.attachEvent) {
            element.attachEvent('on' + type, function() {
                handler.call(element);
            });
        } else {
            element['on' + type] = handler;
        }
    },
    // 移除事件
    removeEvent : function(element, type, handler) {
        if (element.removeEventListener) {
            element.removeEventListener(type, handler, false);
        } else if (element.datachEvent) {
            element.detachEvent('on' + type, handler);
        } else {
            element['on' + type] = null;
        }
    },
    // 阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)
    stopPropagation : function(ev) {
        if (ev.stopPropagation) {
            ev.stopPropagation();
        } else {
            ev.cancelBubble = true;
        }
    },
    // 取消事件的默认行为
    preventDefault : function(event) {
        if (event.preventDefault) {
            event.preventDefault();
        } else {
            event.returnValue = false;
        }
    },
    // 获取事件目标
    getTarget : function(event) {
        return event.target || event.srcElement;
    },
    // 获取event对象的引用,取到事件的所有信息,确保随时能使用event;
    getEvent : function(e) {
        var ev = e || window.event;
        if (!ev) {
            var c = this.getEvent.caller;
            while (c) {
            ev = c.arguments[0];
                if (ev && Event == ev.constructor) {
                    break;
                }
                c = c.caller;
            }
        }
        return ev;
    }
};


3.["1", "2", "3"].map(parseInt) 答案是多少?

parseInt()函数能解析一个字符串,并返回一个整数,需要两个参数 (val, radix),其中radix表示要解析的数字的基数。【该值介于 2 ~ 36 之间,并且字符串中的数字不能大于radix才能正确返回数字结果值】;

但此处 map 传了 3 个 (element, index, array),我们重写parseInt函数测试一下是否符合上面的规则。

function parseInt(str, radix) {
    return str+'-'+radix;
};
var a=["1", "2", "3"];
a.map(parseInt);  // ["1-0", "2-1", "3-2"] 不能大于radix

因为二进制里面,没有数字3,导致出现超范围的radix赋值和不合法的进制解析,才会返回NaN;

所以["1", "2", "3"].map(parseInt) 答案也就是:[1, NaN, NaN]

详解:为什么 ["1", "2", "3"].map(parseInt) 返回 [1,NaN,NaN]?


4.事件是?IE与火狐的事件机制有什么区别?如何阻止冒泡?

  • 我们在网页中的某个操作(有的操作对应多个事件)。例如:当我们点击一个按钮就会产生一个事件。是可以被 JavaScript 侦测到的行为。
  • 事件处理机制:IE是事件冒泡,Firefox同时支持两种事件模型,也就是:捕获型事件和冒泡型事件;
  • ev.stopPropagation();(旧ie的方法 ev.cancelBubble = true;)

附:如何阻止事件冒泡和默认行为?

猜你喜欢

转载自blog.csdn.net/qq_36048820/article/details/80584158