阮一峰JS教程读后感(二)数据类型(下)
2019-06-08 本文已影响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.对象的可遍历属性和不可遍历属性是什么意思?