美文网首页
阮一峰JS教程读后感(二)数据类型(下)

阮一峰JS教程读后感(二)数据类型(下)

作者: 前端艾希 | 来源:发表于2019-06-08 18:30 被阅读0次

数据类型相关问题


1.如果代码行首是一个大括号,JavaScript如何处理它?

如果代码行首是一个大括号,那么它可能是代码块,也可能是一个对象,
为了避免歧义,Js引擎一律解释为代码块。

2.对象的某属性键名为数值时,如何读取该属性?

键名为数值时不能通过点运算符来读取,只能通过方括号运算符。

3.怎样判断对象是否拥有某个属性?

in 运算符,例如 'p' in Obj,如果Obj有p这个属性就返回true,否则返回false

4.使用for in遍历对象时的注意点?

(1)for in不仅遍历对象自身的属性,还遍历对象继承的属性;
(2)for in遍历的是对象的可遍历属性,会跳过不可遍历的属性。
不可遍历属性???

5.使用with对对象属性进行属性赋值时,如果该属性不存在,后果是什么?

如果属性不存在,那么会创造一个当前作用域的全局变量

6.JavaScript中函数声明方法

(1) function命令,function声明的代码区块就是一个函数。
    
    function print(s) {
      console.log(s);
    }
    
(2) 函数表达式,即变量赋值的方法。

    var print = function(s) {
      console.log(s);
    };

(3) function构造函数。

    var add = new Function(
      'x',
      'y',
      'return x + y'
    );
    return前面的就是要输入的变量,return后面的即函数体。

7.如果函数体内没有return语句,那么执行函数后返回的是什么?

如果没有return,那么什么也不返回,或者是返回undefined

8.采用function和表达式声明函数的注意点

(1) 在函数名提升问题上,如果采用的是表达式声明,那么函数名提升会失败。
(2) 当function和表达式重复声明一个函数,最后结果总是采用表达式的声明函数体。

9.函数的length属性的作用是?

字符串的length返回的是长度,函数的length返回的是该函数预期的变量输入个数。

10.函数的toString()方法的作用?

返回一个字符串,字符串的内容是该函数的源码。如果是原生方法则返回原生代码提示,
函数内部的注释也会返回。

11.函数作用域问题,值得mark

    var a = 1;
    var x = function () {
      console.log(a);
    };
    
    function f() {
      var a = 2;
      x();
    }
    
    f() // 1
    
在这段代码中可以发现函数x并不能访问函数f内的值。即函数的作用域是声明时
所在的作用域,与运行时作用域无关。

12.JavaScript中函数的参数可以省略么?如果省略的话后果是什么?

与其他语言不同的是JavaScript中函数的参数时可以省略的,并不会报错,
如果省略的话,该参数的值就是undefined。

13.如果函数形参中有同名参数,JavaScript会如何处置?

取最后的一个值,例如:
f(a,a) {
    console.log(a)
}
f(1,2) //2

14.如果在声明函数时不确定调用函数时会传入几个参数,应当如何操作?

在其他语言中会在声明函数时形参中加入*kwargs,**kwargs,在js中是这样处理的:
函数内部可以通过arguments这个对象访问传入的所有的参数。

15.闭包是什么?闭包的作用是什么?

闭包可以理解为一个闭环,设有函数 f() ,f() 能访问window的变量,
window也能访问 f() 的变量,那么就形成了一个闭环,即闭包。
作用:
(1)可以在函数作用域之外读取函数内部的变量;
(2)可以让这些变量始终保持在内存中,类似于python的生成器;
(3)封装对象的私有属性和私有方法。

16.有哪几种方法解析json数据?

(1)eval,但是eval存在安全性问题,不推荐使用;
(2)JSON.parse

17.数组的本质是什么?

数组的本质是对象,设arry为数组,arry.keys为0,1,2,3...,所以arry
是键名为递增整数的特殊的对象。

18.如果修改数组的length属性会造成什么后果?

设arry = ['a','b','c'],此时arry.length为3,如果修改其length为2,
那么arry的最后一个属性会丢失,此时arry = ['a','b']

19.对数组使用delete删除某一键值后会造成什么后果?

使用delete删除该键值后,键名还在,键值为空,如果删除的是数字键名对应的键值,
那么不会改变length属性。

未解决问题

1.对象的可遍历属性和不可遍历属性是什么意思?

相关文章

网友评论

      本文标题:阮一峰JS教程读后感(二)数据类型(下)

      本文链接:https://www.haomeiwen.com/subject/yuzixctx.html