js(3)知识小总结

js知识总结(eval函数、伪数组和instanceof关键字的使用)

一:Object.protoType成员介绍:

var obj={
    name:'jack',
    age:20
}
1.constructor属性:指向和该原型相关的构造函数
2.hasOwnProperty方法:判断该对象自身是否拥有指定名称的属性
console.log(obj.hasOwnProperty('name'));true
console.log(obj.hasOwnProperty('age'));false
3.isPrototypeOf:判断一个对象是否是另外一个对象的原型,如下面的代码是判断obj是否是obj1的原型
var obj1={};
obj1.__proto__=obj;
console.log(obj.isPrototypeOf(obj1));
4.propertyIsEnumerable:  判断属性是否属于自身  同时判断属性是否可以遍历
注意:使用defineProperty添加的属性不能被遍历到
console.log(obj.propertyIsEnumerable('gender'));
5.toLocalString/toString,如日期格式不一样
toLocalString:将对象转换为本地格式的字符串
toString:将对象转换为国际通过的字符串
var d=new Date();
console.log(d.toString());
console.log(d.toLocaleString());
valueOf():用来获取对象的值。一般是使用在引用类型和值类型进行相互运算的时候。系统会首先调用valueOf方法来获取引用类型数据的值,如果这个值可以参与运算则使用其进行运算,如果不可以,还会调用toString方法获取对象的值参与运算

二:Function

  1. 函数也是一个对象,对象都是通过构造函数创建的,函数的构造函数就是Function,,JS中所有的函数的构造函数都是Function,可以通过new Function()来创建
  2. Function初步使用:

    1.如果直接使用new Function()而不传入任何的参数,那么就会创建出一个匿名函数
    2.可以给函数传递一个参数,这个参数后期就会成为函数的函数体/
    var fun=new Function();
    console.log(typeof fun);
    console.log(fun);
    /
    var fun=new Function(‘console.log(“能不能输出”)’);
    fun();
    3.也可以给函数传入多个参数,前面的参数都是函数的参数,最后一个是函数体
    var calculate=new Function(“a”,”b”,”return a+b;”);
    var result=calculate(4,5);
    console.log(result);

  1. Function代码过长的问题的解决:
    a) 拼接字符串
    b) 使用反引号``
    c) 使用\
    d) 使用模板
    e) 示例:

    计算数组中所有元素的和
    var calcu=new Function(“arr”,

    "var sum=0;"+
     "for (var i = 0; i < arr.length; i++) {"+
     "    sum+=arr[i];"+
     "}"+
    "return sum;");
    

    var calcu=new Function(“arr”,

    `var sum=0;
    for (var i = 0; i < arr.length; i++) {
        sum+=arr[i];
    }
    return sum;`);
    

    var calcu=new Function(“arr”,

    "var sum=0;\
    for (var i = 0; i < arr.length; i++) {\
        sum+=arr[i];\
    }\
    return sum;");
    

    var calcu=new Function(“arr”,document.getElementById(“fun”).innerHTML);
    console.log(calcu([1,2,3,4]));

三:eval函数的使用:可以将字符串的内容当成js代码来执行

可以将eval中的字符串当成代码来解析
eval("var num=100;");
console.log(num);
可以将json格式字符串转换为json对象
 注意:
1.eval函数会将json格式的字符串的{}当成代码块处理,造成报错
2.所以。可以给这个json字符串前后拼接一个()
3.这样,加了()后的字符串就会被认为是一个字面量来处理了
var jsonStr='{"name":"jack","age":20}';
var obj=eval("("+jsonStr+")");
eval("var obj="+jsonStr);
console.log(obj);

四:使用eval实现简易计算器:

document.querySelector("[type=button]").onclick=function(){
    var num1=document.getElementById("num1").value;
    var num2=document.getElementById("num2").value;
    var opt=document.getElementById("opt").value;
    var result=eval(num1+opt+num2);
    document.getElementById("result").value=result;
}

五:函数对象的属性

  1. arguments:函数内部的一个变量,它是一个伪数组。当函数被调用的时候,会将所有的实参依次存入这个伪数组中,它只有在函数被调用的时候才会有值,它与函数.arguments的功能一样,存储的内容也一样,但并非同一个对象
  2. caller:获取当前函数是在哪个函数中被调用,注意,这个属性值必须在函数被调用的才能取到值,所以需要将 函数.caller 代码写在函数体内,当这段代码被执行的时候,就是这个函数被调用的时候。同时需要注意的时候,如果是全局调用,那么caller只能返回null
  3. length:形参的数量
  4. name:函数名称.通过函数表达式声明的函数,函数的name就是变量名称
  5. protoType:函数的原型

    六:伪数组

  6. 概念:伪数组拥有与数组一样的下标,可以通过下标来访问各种元素,拥有长度属性,可以表示其中存储的元素的数量。但是没有数组类似的方法

七:instanceof关键字的使用:

  1. 作用:判断构造函数的protoType属性是否在对象的原型链上
  2. 示例:
    instanceof:判断构造函数的protoType属性是否在对象的原型链上
    function Person(){}
    var p =new Person();
    p—>Person.protoType–>Object.protoType—>null
    console.log(p instanceof Person);
    console.log(p instanceof Object);

console.log(‘—————–’);
Person–>Function.protoType—>Object.protoType—>null
console.log(Person instanceof Function);

-------------本文结束感谢您的阅读-------------