JS易用常用知识点攒集(陆续更新)

  • 1. 如何正确获取Javascript对象的类属性呢?---toString()

由于JS中很多对象继承toString()被重写了,为了能正确调用toString()版本,必须间接调用Function.call()方法

    function classOf(o){
        if(o === null)  return 'Null';
        if(o === undefined) return 'Undefined';
        return Object.prototype.toString.call(o).slice(8,-1);
    }

测试一下:

    classOf({}); //==>"Object"
    classOf(''); //==>"String"
    classOf(2); //==>"Number"
    classOf([]); //==>"Array"
    classOf(null); //==>"Null"
    classOf(/./); //==>"Regexp"
    classOf(new Date()); //==>"Date"
    classOf(false) //==>"Boolean"
  • 2. JS中可被判定为false的6种情况

js必须牢记的6个蛋蛋: 请你一定要记住:在js逻辑运算中,0、""(空字符)、null、false、undefined、NaN都会判为false,其他都为true,这个一定要记住,不然应用 || 和 && 就会出现问题。

  • 3. ' !! ' 作用与用法
var a;
var b=!!a;

a默认是undefined。!a是true,!!a则是false,所以b的值是false,而不再是undefined,也非其它值,主要是为后续判断提供便利。
!!的作用是把一个其他类型的变量转成的bool类型。

  • 4. 变量提升-- 关键字var、let
var a = {b:a}  //=>由于var变量提升,在对a进行打印的时候 {b:undefined}
let a = {b:a} //=>let关键字不会造成变量提升,在这样去定义a变量的时候会报错 a is not defined
  • 5.在js中绑定onclick事件为什么不加括号,在html代码中必须要加?

加上括号是执行的意思,添加事件的回调函数应该就是给相应的事件属性赋值,而很明显需要把一个函数赋值给这个事件属性,而不是函数的调用结果。所以在js中的绑定是直接赋值。
而在标签内的事件属性的值是由引号包裹的,代表的是当点击该元素时,执行引号内的代码,直接把引号内的代码拿出来跑,如果你不加括号,那就不会调用那个函数。

 //=> ƒ fn(){console.log('test')}
 //=> test

funciton fn(){
  console.log('test')
}

这两个标签执行时相当于在相应的事件里执行eval("..."),第一个标签点击时等价于eval("fn"),输出函数fn的函数体ƒ fn(){console.log('test')},也就是说用户点击时并没有得到想要的结果;第二个标签点击时等价于eval("fn()"),输出test,可以得到目的结果,所以在html标签上的事件属性的值如果是要调用function就一定要加()来保证点击后可以得到目的结果。

  • 6.在js中~~~!!|=|&<<>>>>>的含义以及用法?

~ 按位取反运算符

表达式 二进制值 结果
5 0000 0101 5
~5 1111 1010 -6

换算的过程如下:

步骤 数值 描述
0000 0101
按位取反 1111 1010 发现最高位是1,代表符号-负数
除符号位外按位取反 1000 0101
末位加1求其补码 +             1
结果 1000 0110 转换成十进制为-6
  • 7.JSON.parse()与JSONstringfy()详细用法
    JSON对象包含两个方法: 用于解析 JavaScript Object Notation (JSON) 的 parse() 方法,以及将对象/值转换为 JSON字符串的 stringify() 方法。除了这两个方法, JSON这个对象本身并没有其他作用,也不能被调用或者作为构造函数调用,具体参考 JSON
    JSON中严格是要使用双引号"" 而不是单引号''

    先看MDN上的JSON.parse()说明:
    JSON.parse() 方法用来解析JSON字符串,构造由字符串描述的JavaScript 值或对象。提供可选的reviver函数用以在返回之前对所得到的对象执行变换。

    JSON.parse(text[, reviver])

    参数

    text
    要被解析成JavaScript值的字符串。

    reviver(可选)
    转换器, 如果传入该参数(函数),可以用来修改解析生成的原始值,调用时机在 parse函数返回之前。

    返回值

    Object类型, 对应给定JSON文本的对象/值
    使用示例:

    JSON.parse('{}');              // {}
    JSON.parse('true');            // true
    JSON.parse('"foo"');           // "foo"
    JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
    JSON.parse('null');            // null
    JSON.parse('1');               //  1
    

    以上的示例都是JSON.parse()适用的类型。

    下面再看一下JSON.stringfy()方法:
    JSON.stringify()方法是将一个JavaScript值(对象或者数组)转换为一个 JSON 字符串,如果指定了replacer是一个函数,则可以替换值,或者如果指定了replacer是一个数组,可选的仅包括指定的属性。

    JSON.stringify(value[, replacer [, space]])

    参数

    value
    将要序列化成 一个JSON 字符串的值。

    replacer(可选)
    如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;如果该参数为null或者未提供,则对象所有的属性都会被序列化;关于该参数更详细的解释和示例,请参考使用原生的 JSON 对象一文。

    space(可选)
    指定缩进用的空白字符串,用于美化输出(pretty-print);如果参数是个数字,它代表有多少的空格;上限为10。该值若小于1,则意味着没有空格;如果该参数为字符串(字符串的前十个字母),该字符串将被作为空格;如果该参数没有提供(或者为null)将没有空格。

    返回值

    一个表示给定值的JSON字符串。

    JSON.stringify({});                        // '{}'
    JSON.stringify(true);                      // 'true'
    JSON.stringify("foo");                     // '"foo"'
    JSON.stringify([1, "false", false]);       // '[1,"false",false]'
    JSON.stringify({ x: 5 });                  // '{"x":5}'
    

    chrome开发者模式执行结果如下:


    可以看到黑色双引号内的内容与我们转进行stringfy之前的是一样的。
    我们从这两个方法看出来parse方法需要的是单引号,stringfy执行后是双引号,如果将执行结果复制再用parse方法执行就会报错,如果用stringfy执行后结果赋值给变量,再将这个变量用parse方法转换就会得到预期结果。

你可能感兴趣的:(JS易用常用知识点攒集(陆续更新))