专项练习14

目录

一、选择题

    1、请问以下两次检测对象constructor是否拥有属性名1的结果分别是什么?

    2、请问以下JS代码最后输出的len值是多少?

    3、在JavaScript中,以下哪些是原始值(primitive value)?

二、编程题

    1、将字符串参数转换为大写字符串并返回

    2、以数组的形式输出对象各个属性的键名

    3、将数字参数转换为对象的形式返回


一、选择题

1、请问以下两次检测对象constructor是否拥有属性名1的结果分别是什么?
1 in Object(1.0).constructor;
Number[1] = 123;
1 in Object(1.0).constructor;

A、false、false

B、false、true

扫描二维码关注公众号,回复: 15522230 查看本文章

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>

猜你喜欢

转载自blog.csdn.net/qq_51478745/article/details/131446036