目录
1、请问以下两次检测对象constructor是否拥有属性名1的结果分别是什么?
3、在JavaScript中,以下哪些是原始值(primitive value)?
一、选择题
1、请问以下两次检测对象constructor是否拥有属性名1的结果分别是什么?
1 in Object(1.0).constructor;
Number[1] = 123;
1 in Object(1.0).constructor;
A、false、false
B、false、true
C、true、true
D、true、false
正确答案:B
解析:
(1)Object(1.0) 相当于new Number(1.0),实例化了一个Number类型的对象,Object(1.0).constructor指向实例化这个对象的构造函数Number
第一行1 in Object(1.0).constructor,意思是判断此时的Number构造函数里是否包含1这个属性,1并不在Number原型链上所以返回false
(2)Number是构造函数,也是对象,是对象就能添加属性
第二行 通过 Object[key] = value; 形式给 constructor 对象添加 key = 1 属性,对应的 value = 123 ;
此时1处于Number的原型链上,第三行 1 in Object(1.0).constructor 结果为 true
2、请问以下JS代码最后输出的len值是多少?
var len = 117;
let func = {
len: 935,
showLen: function() {
console.log(this.len);
},
show: function() {
(function(cb) {
cb();
})(this.showLen)
}
}
func.show();
A、117
B、935
C、undefined
D、null
正确答案:A
解析:
立即执行函数的this指向是window(非严格模式下)
作为一个匿名函数,在被调用的时,往往是直接调用,因此它的this是确定的,len取的是window下的len值,即117
// 在JavaScript的函数中,this始终指向调用者的上下文环境
var len = 117 // 5. 全局作用域中使用 var 定义的变量默认会成为 window 的属性,及 window.len
let func = {
len: 935,
showLen: function () {
console.log(this.len) // 4. this 此时指向的是 window,所以相当于打印 window.len
},
show: function () {
(function (cb) {
cb() // 3. cb 相当于 cb.call() 默认没有传入上下文环境时 this 指向全局的 window 对象
})(this.showLen) // 2. this 是 func 所以传入的是上面定义的 showLen 函数
}
}
func.show() // 1. 相当于 func.show.call(func),此时 this 是 func对象
3、在JavaScript中,以下哪些是原始值(primitive value)?
A、”3”
B、10
C、null
D、[1]
正确答案:ABC 你的答案:BCD
解析:
(1)ECMAScript中,变量可以存放两种类型的值,即原始值和引用值
①原始值:存储在栈中的简单数据段,它们的值直接存储在变量访问的位置
②引用值:存储在堆中的对象,存储在变量处的值是一个指针,指向存储对象的内存处
(2)选项中的值分别是:string、number、null,而最后一个是数组,数组是一个对象,是引用值
二、编程题
1、将字符串参数转换为大写字符串并返回
解析:
toUpperCase()方法
<script>
let string = 'sxxhlxxdb'
function _touppercase(string){
return string.toUpperCase()
}
console.log(_touppercase(string));
</script>
2、以数组的形式输出对象各个属性的键名
示例: _keys({name:'nowcoder',age:7}) -> ['name','age']
注意:只需考虑对象属性均为原始数据类型的情况
解析:
(1)法一:Object.keys(obj)
<script>
let object = {name:'nowcoder',age:7}
function _keys(object){
return Object.keys(object)
}
console.log(_keys(object));
</script>
(2)创建一个数组将for...in遍历对象的每一个属性push()进去
<script>
let object = {name:'nowcoder',age:7}
function _keys(object){
let arr = []
for(let i in object){
arr.push(i)
}
return arr
}
console.log(_keys(object));
</script>
3、将数字参数转换为对象的形式返回
示例:typeof number === 'number' -> typeof _numbertoobject(number) === 'object'
解析:
(1)法一:增强写法
<script>
let number = 123456789
function _numbertoobject(number){
return {number}
}
console.log(_numbertoobject(number));
</script>
(2)法二:new一个实例对象
<script>
let number = 123456789
function _numbertoobject(number){
return new Object(number)
}
console.log(_numbertoobject(number));
</script>