zoukankan      html  css  js  c++  java
  • JS输出题练习

    1.下面代码的输出是什么?

    const one = (false || {} || null)
    const two = (null || false || "")
    const three = ([] || 0 || true)
    
    console.log(one, two, three)
    
    

    2.下面代码的输出是什么?

    (() => {
     let x, y;
     try {
      throw new Error();
     } catch (x) {
      (x = 1), (y = 2);
      console.log(x);
     }
     console.log(x);
     console.log(y);
    })();
    
    

    3.下面代码的输出是什么?

    function sayHi() {
     return (() => 0)();
    }
    
    typeof sayHi();
    
    

    4.下面代码的输出是什么?

    const person = { name: "Lydia" };
    
    function sayHi(age) {
     console.log(`${this.name} is ${age}`);
    }
    
    sayHi.call(person, 21);
    sayHi.bind(person, 21);
    
    

    5.下面代码的输出是什么?

    const a = {};
    const b = { key: "b" };
    const c = { key: "c" };
    
    a[b] = 123;
    a[c] = 456;
    
    console.log(a[b]);
    
    

    1-5答案解析。

    1.{} "" []
    解析:使用||运算符,我们可以返回第一个真值。 如果所有值都是假值,则返回最后一个值。
    (false || {} || null):空对象{}是一个真值。 这是第一个(也是唯一的)真值,它将被返回。one等于{}。
    (null || false ||“”):所有值都是假值。 这意味着返回传递的值""。 two等于""。
    ([] || 0 ||“”):空数组[]是一个真值。 这是第一个返回的真值。 three等于[]。
    2.1 undefined 2
    解析:catch块接收参数x。当我们传递参数时,这与变量的x不同。这个变量x是属于catch作用域的。
    之后,我们将这个块级作用域的变量设置为1,并设置变量y的值。 现在,我们打印块级作用域的变量x,它等于1。
    在catch块之外,x仍然是undefined,而y是2。 当我们想在catch块之外的console.log(x)时,它返回undefined,而y返回2。
    3."number"
    解析:sayHi函数返回立即调用的函数的返回值。 该函数返回0,类型为数字。
    4.Lydia is 21   function
    使用两者,我们可以传递我们想要this关键字引用的对象。 但是,.call方法会立即执行!
    bind方法会返回函数的拷贝值,但带有绑定的上下文! 它不会立即执行。
    5.456
    解析:当对象自动转换为字符串化时,它变成了[Object object]。 所以我们在这里说的是a["Object object"] = 123。
    然后,我们可以尝试再次做同样的事情。 c对象同样会发生隐式类型转换。那么,a["Object object"] = 456
    然后,我们打印a[b],它实际上是a["Object object"]。因此返回456。
    
    

    6.下面代码的输出是什么?

    function Person(firstName, lastName) {
      this.firstName = firstName
      this.lastName = lastName
    }
    
    const lydia = new Person('Lydia', 'Hallie')
    const sarah = Person('Sarah', 'Smith')
    
    console.log(lydia)
    console.log(sarah)
    
    

    7.下面代码的输出是什么?

    function Person(firstName, lastName) {
      this.firstName = firstName;
      this.lastName = lastName;
    }
    
    const member = new Person("Lydia", "Hallie");
    Person.getFullName = function () {
      return `${this.firstName} ${this.lastName}`;
    }
    
    console.log(member.getFullName());
    
    

    8.下面代码的输出是什么?

    let number = 0
    console.log(number++)
    console.log(++number)
    console.log(number)
    
    

    9.下面代码的输出是什么?

    function getPersonInfo(one, two, three) {
      console.log(one)
      console.log(two)
      console.log(three)
    }
    
    const person = 'Lydia'
    const age = 21
    
    getPersonInfo`${person} is ${age} years old`
    
    

    10.下面代码的输出是什么?

    const info = {
      [Symbol('a')]: 'b'
    }
    
    console.log(info)
    console.log(Object.keys(info))
    
    

    6-10答案解析。

    6.Person {firstName: "Lydia", lastName: "Hallie"} and undefined
    解析:lydia使用new关键字 创建了一个新得实例对象,this 引用我们创建的空对象,把Person中this声明赋给自己。
         sarah,我们没有使用 new 关键字。this 引用的是「全局对象」
         我们说 this.firstName 等于 "Sarah",并且 this.lastName 等于 "Smith"。实际上我们做的是,
         定义了 global.firstName = 'Sarah' 和 global.lastName = 'Smith'。而 sarah 本身是 undefined。
    7.TypeError
    解析:你不能像常规对象那样,给构造函数添加属性。如果你想一次性给所有实例添加特性,你应该使用原型Person.prototype.getFullName
    8. 0 2 2
    解析:要明白++在前和在后得区别,在后是先输出值在计算,在前是先计算后输出值。
    一元「后自增」运算符 ++:返回值(返回 0)值自增(number 现在是 1)
    一元「前自增」运算符 ++:值自增(number 现在是 2)返回值(返回 2)
    9.["", " is ", " years old"] "Lydia" 21
    解析:如果使用标记模板字面量,第一个参数的值总是包含字符串的数组。其余的参数获取的是传递的表达式的值!
    10.{Symbol('a'): 'b'} and []
        Symbol类型是不可枚举的。Object.keys方法返回对象上的所有可枚举的键属性
        Symbol类型是不可见的,并返回一个空数组。 记录整个对象时,所有属性都是可见的,甚至是不可枚举的属性
    
    

    11.下面代码的输出是什么?

    class Person {
      constructor() {
        this.name = "Lydia"
      }
    }
    
    Person = class AnotherPerson {
      constructor() {
        this.name = "Sarah"
      }
    }
    
    const member = new Person()
    console.log(member.name)
    
    

    12.下面代码的输出是什么?

    function nums(a, b) {
      if
      (a > b)
      console.log('a is bigger')
      else 
      console.log('b is bigger')
      return 
      a + b
    }
    
    console.log(nums(4, 2))
    console.log(nums(1, 2))
    
    
    

    13.下面代码的输出是什么?

    function getItems(fruitList, ...args, favoriteFruit) {
      return [...fruitList, ...args, favoriteFruit]
    }
    
    getItems(["banana", "apple"], "pear", "orange")
    
    

    14.下面代码的输出是什么?

    let newList = [1, 2, 3].push(4)
    
    console.log(newList.push(5))
    
    

    15.下面代码的输出是什么?

    // module.js 
    export default () => "Hello world"
    export const name = "Lydia"
    
    // index.js 
    import * as data from "./module"
    
    console.log(data)
    
    

    11-15答案解析。

    11. "Sarah"
    解析:我们可以将类设置为等于其他类/函数构造函数。 在这种情况下,我们将Person设置为AnotherPerson。 
    这个构造函数的名字是Sarah,所以新的Person实例member上的name属性是Sarah
    12.a is bigger, undefined and b is bigger, undefined
    注意看 return和a+b并不在同一行,javaScript引擎仍然在语句之后自动添加分号,
    我们在新的一行上写了一个return语句和另一个值a + b。然而,由于它是一个新行,引擎并不知道它实际上是我们想要返回的值
    相反,它会在return后面自动添加分号。就变成了下面这样
      return;
      a + b
    13.SyntaxError
    解析:... args是剩余参数,剩余参数的值是一个包含所有剩余参数的数组,「并且只能作为最后一个参数」。上述示例中,剩余参数是第二个参数,这是不可能的,并会抛出语法错误。
    14.Error
    解析:.push方法返回数组的长度,而不是数组本身!尝试在newList上使用.push方法。 由于newList是数值4,抛出TypeError。
    15.{ default: function default(), name: "Lydia" }
    解析:使用import * as name语法,我们将module.js文件中所有export导入到index.js文件中,并且创建了一个名为data的新对象。
    在module.js文件中,有两个导出:默认导出和命名导出。 默认导出是一个返回字符串“Hello World”的函数,命名导出是一个名为name的变量,其值为字符串“Lydia”。
    data对象具有默认导出的default属性,其他属性具有指定exports的名称及其对应的值
    

    16.下面代码的输出是什么?

    const person = { name: 'Lydia' }
    
    function sayHi(age) {
      console.log(`${this.name} is ${age}`)
    }
    
    sayHi.call(person, 21)
    sayHi.bind(person, 21)
    
    

    17.下面代码的输出是什么?

    console.log(typeof typeof 1)
    
    

    18.下面代码的输出是什么?

    [[0, 1], [2, 3]].reduce(
      (acc, cur) => {
        return acc.concat(cur)
      },
      [1, 2]
    )
    
    

    16-18答案解析。

    16.Lydia is 21 function
    .call 是「立即执行」的。.bind 返回函数的「副本」,但带有绑定上下文!它不是立即执行的。
    17.string
    typeof 1 返回 "number"。 typeof "number" 返回 "string"。
    18.[1, 2, 0, 1, 2, 3]
    [1, 2]是初始值。初始值将会作为首次调用时第一个参数 acc 的值。在第一次执行时, acc 的值是 [1, 2], cur 的值是 [0, 1]。合并它们,结果为 [1, 2, 0, 1]。
    第二次执行, acc 的值是 [1, 2, 0, 1], cur 的值是 [2, 3]。合并它们,最终结果为 [1, 2, 0, 1, 2, 3]
    
    
  • 相关阅读:
    Eclipse调试Java的10个技巧
    什么是POJO?
    能够提高开发效率的Eclipse实用操作
    Oracle数据库查看执行计划
    Oracle执行计划详解
    Android接收wifi路由器发送过来的一组字节数据
    Android与路由器连接服务
    Android真机连接手机Target显示unknown cmd命令下adb devices 显示offline
    绿豆沙色值多少
    如何在Eclipse中添加Servlet-api.jar的方法
  • 原文地址:https://www.cnblogs.com/loveliang/p/13645515.html
Copyright © 2011-2022 走看看