• 个人js错题集(2)


    1.以下 ECMAScript 变量命名格式正确的是

    A    _125doll
    B    1207A
    C    -dollor
    D    var
    正确答案: A
    解析:

    _125doll

    ECMAScript——命名规范

    1、js中是严格区分大小写的
    test和Test是两个名字

    2、使用驼峰命名法
    第一个首字母小写,其余每一个有意义的单词的首字母都要大写
    可以使用字母、数字、下划线、$命名,但是数字不能作为开头,如:
    学生信息: studentInfo studentInfo2
    人员的重要信息: personImportInfo
    $person:通常项目中这种名字代表的是jQuery专用的名字

    3、不能使用关键字和保留字
    关键字:js中具有特殊意义的词,我们不能随便拿来命名
    保留字:未来可能会成为关键字的

    关键字:

    break

    case

    catch

    continue

    default

    delete

    do

    else

    finally

    for

    function

    if

    in

    instanceof

    new

    return

    switch

    this

    throw

    try

    typeof

    var

    void

    while

    with

    保留字:

    abstract

    boolean

    byte

    char

    class

    const

    debugger

    double

    enum

    export

    extends

    final

    float

    goto

    implements

    import

    int

    interface

    long

    native

    package

    private

    protected

    public

    short

    static

    super

    synchronized

    throws

    transient

    volatile

     

    4、对于全局变量或者公用的变量我们最好起名字的时候前面加上 _ ,例如:_this、_num这些都代表是公用的变量

    2.  Number(true) 返回值为

    A   true
    B   1
    C   0
    D   NaN
     
    正确答案: B
    解析:1

    转换规则:

    Number():

    1)如果是Boolean值,true和false将分别转换为1和0。

    2)如果是数字值,只是简单的传入和返回。

    3)如果是null值,返回0。

    4)如果是undefined,返回NaN。

    5)如果是字符串,遵循下列规则:

    如果是字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即“1”变成1,“123”会变成123,而“011”会变成11(前导的零被忽略了);
    如果字符串中包含有效的浮点格式,如“1.1”,则将其转换为对应的浮点数值(同样也会忽略前导零);
    如果字符串中包含有效的十六进制格式,例如"0xf",则将其他转换为相同大小的十进制整数值;
    如果字符串是空的(不包含任何字符),则将其转换为0;
    如果字符串中包含除上述格式之外的字符,则将其他转换成NaN.
    6)如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用的对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。


    3.代码的输出结果是 

    var str = ''; 

    for(var b = 1;b < 11;b ++){    

        str += 'helloworld<br>'; 

    document.write(str);

    A  helloworld

    B  helloworld<br>
    输出10个helloworld
    D  输出10个helloworld<br>
    正确答案: C
    解析:

    循环10次,拼接字符串再一次性输出

    4.以下哪项不属于javascript的特征

    A  Javascript是一种脚本语言
    B  Javascript是事件驱动的
    C  Javascript代码需要手动编译以后才能执行
    D  Javascript是独立于平台的 
    正确答案: C
    解析:

    JavaScript是基于事件驱动并独立于平台的脚本语言

    JavaScript的特点
    (1).一种解释性执行的脚本语言。
    同其他脚本语言一样,JavaScript也是一种解释性语言,其提供了一个非常方便的开发过程。JavaScript的语法基本结构形式与C、C++、Java十分类似。但在使用前,不像这些语言需要先编译,而是在程序运行过程中被逐行地解释。JavaScript与HTML标识结合在一起,从而方便用户的使用操作。
    (2).一种基于对象的脚本语言。
    其也可以被看作是一种面向对象的语言,这意味着JavaScript能运用其已经创建的对象。因此,许多功能可以来自于脚本环境中对象的方法与脚本的相互作用。
    (3).一种简单弱类型脚本语言。
    其简单性主要体现在:首先,JavaScript是一种基于Java基本语句和控制流之上的简单而紧凑的设计,从而对于使用者学习Java或其他C语系的编程语言是一种非常好的过渡,而对于具有C语系编程功底的程序员来说,JavaScript上手也非常容易;其次,其变量类型是采用弱类型,并未使用严格的数据类型。
    (4).一种相对安全脚本语言。
    JavaScript作为一种安全性语言,不被允许访问本地的硬盘,且不能将数据存入服务器,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互。从而有效地防止数据的丢失或对系统的非法访问。
    (5).一种事件驱动脚本语言。
    JavaScript对用户的响应,是以事件驱动的方式进行的。在网页(Web Page)中执行了某种操作所产生的动作,被称为“事件”(Event)。例如按下鼠标、移动窗口、选择菜单等都可以被视为事件。当事件发生后,可能会引起相应的事件响应,执行某些对应的脚本,这种机制被称为“事件驱动”。
    (6).一种跨平台性脚本语言。
    JavaScript依赖于浏览器本身,与操作环境无关,只要计算机能运行浏览器,并支持JavaScript的浏览器,就可正确执行,从而实现了“编写一次,走遍天下”的梦想。

    5.以下代码执行后,分别弹出来的值是: var num1=1;   function testf1(){  num1=2;    var num1;  alert(num1); } function testf2(){  alert(num1); }   testf1();   testf2(); 

    A  2,1
    B  2,2
    C  undefined,undefined
    D  2,undefined
     
    正确答案: A
    解析:

    testf1函数先执行, 先进行变量提升, 且里面的num1为私有变量,不会更改全局变量

    testf2 里面的num1为全局变量

    6.下面哪些是循环语句

    A  while

    B  do...while

    C  for

    D  switch
     
    正确答案: A,B,C
    解析:

    while、do...while、for

    一、循环的概念
    循环就是重复执行一段代码,是一种最能发挥计算机优势的程序结构。

    循环结构的代码由循环体、循环变量、和循环条件组成。当循环变量满足循环条件时会重复执行循环体内的代码,直到循环变量不满足循环条件时就终止循环,接着执行循环结构后的代码。

    JS中有while、do while、for三种循环。

    while(表达式){
    循环体;
    }

    二、while语句
    语法:

    while(表达式){
    循环体;
    }

    例:从1加到100

    var i=1;
    var x=0;
    while(i<=100){
    x=x+i;
    i++;
    }
    alert(x);

    while循环
    要点:
    1,循环变量要先初始化。
    2,每次循环前判断表达式,表达式成立后执行循环体语句。
    3,循环体中,应有结束循环的条件(有个代码朝着循环条件
    不满足的方向靠近),否则会造成死循环。
    4,当不确定循环多少次时可用死循环。
    5,循环体中可以写若干句合法的javaScript代码,包括if,
    也可以再套个循环语句。

    三、do while语句
    语法:

    do
    {
    循环体;
    }while(表达式);

    do while 和while的区别,do while先循环一次,后判断循环条件。
    也就是说无论如何都会执行一次循环体。
    例: //一百以内奇数

    var i=1;
    do{
    if(i%2!=0){
    document.write(i+"<br/>");
    }
    i++;
    }while(i<=100)

    四、for循环
    语法:

    for(表达式1;表达式2;表达式3)
    {
    循环体;
    }

    利用三个表达式把循环控制与循环体分离,结构更加清晰。是使用最多的循环语句。
    表达式1初始化循环变量,表达式2判断循环条件,表达式3改变循环变量的值。

    例: //一百以内奇数

    for(var i=0;i<=100;i++){
    if(i%2!=0){
    document.write(i+"<br/>");
    }
    }

    五、break和continue
    1.continue
    只能在循环语句中使用,使本次循环结束,即跳过循环体中continue下面尚未执行的语句,接着进行下次是
    否执行循环的判断。
    例:输出100 以内的 奇数,不包含3 的倍数

    for(var i=0;i<=100;i++){
    if(i%2!=0){
    if(i%3==0){
    continue; //continue执行后document.write不在执行则会继续执行循环语句
    }
    document.write(i+"<br/>");
    }
    }


    2.break
    break 语句功能:
    1 ,在 switch 语句中使流程跳出( ( 终止 ) switch 结构 。
    2 ,在 循环语句中使流程跳出( ( 终止) ) 当前循环。
    注意:
    1 ,如 果已执行 break 语句,就不会执行循环体中位于
    break 后的语句 。
    2 ,在 多层循环中,一个 break 语句只向外跳一层。
    示例:
    判断一个数是不是合数。(能被1 1 和自身以外的整除)
    判 断一个数是不是素 数( ( 质数) ) 。
    //判断合数

    for(var i=2;i<num1;i++){
    if(num1%i==0){
    alert("是合数");
    break;
    }
    }

    alert(“判断完毕。”);

    六、死循环,循环嵌套
    1.死循环
    死循环:循环条件永远满足

    while(true){
    }
    do{
    }while(true);
    for(循环语句){
    }

    2.循环嵌套
    1 ,一个循环内包含完整的另一个循环语句。
    2 ,被 包。 含的循环语句叫内循环,包含别的循环的循环语句叫外循环。
    3 ,外 循。 环每执行一次循环,内循环都会完全执行所有循环次数。,
    4 ,循 环嵌。 套的总执行次数是外循环次数乘以内循环次数。
    注:可使用浏览器的调试功能一步步查看循环嵌套的执行
    例:打印三角形
    for(var i=1;i<=4;i++){

    for(var j=1;j<=i;j++){
    document.write("星星")
    }
    document.write("<br/>");
    }

    7.以下是JavaScript基本数据类型的是

    A  Object
    B  number
    C  string
    D  boolean
     
    正确答案: B,C,D
    解析: Object是引用类型

    5种基本数据类型:

    number

    这种类型用来表示整数和浮点数值,还有一种特殊的数值,即NaN(非数值 not a number)。

    var b = 2 / 0 ;
    console.log(typeof(b)); //输出的结果为NaN
    

    string

    string用于表示由零、数字或字符组成的字符序列,即字符串。字符串可以由英文单引号'或双引号"表示。

    var year = "2017年";
    console.log(typeof(year)); // 输出的结果为string
    var thing = "abcd12345@?";
    console.log(typeof(thing)); // 输出的结果为string
    

    boolean

    该类型只有两个字面值:true和false。这两个值与数字值不要混为一谈,因此true不一定等于1,而false也不一定等于0。虽然Boolean类型的字面值只有两个,但JavaScript中所有类型的值都有与这两个Boolean值等价的值。

    var a = 5;
    var b = 3;
    console.log(typeof(a > b)); // 输出结果为boolean
    

    下表为任何数据类型与布尔值的等价值:

    数据类型 转换为true的值 转换为false的值

    数据类型转换为true的值转换为false的值
    boolean true false
    string 任何非空的字符串 ""(空字符串)
    number 任何非0数值(包括无穷大) 0和NaN
    object 任何对象 null
    undefined !undefined undefined

    undefined

    在使用var声明变量但未对其加以赋值时,这个变量的值就是undefined。

    var a ;
    console.log(typeof(a)); //输出结果为undefined
    

    null

    从逻辑角度来看,null值表示一个空对象,故使用typeof关键字检测null时会返回object。

    var cat = null;
    console.log(typeof(cat)); // 输出结果为object
    

    这里需要注意undefined和null,实际上,undefined值是派生自null值的。尽管null和undefined有这样的关系,但它们的用途完全不同。如果变量旨在保存一个对象但还没有保存对象时,可以声明变量并赋予变量初始化的null值。

    8.JavaScript运算符都有哪些 

    赋值运算符
    算术运算符
    关系运算符
    逻辑运算符
     
    正确答案: A,B,C,D
    解析:赋值运算符=、数学运算符+ - * / %、一元运算符++  --、逻辑运算符&&  || !
     

    JavaScript 算数运算符

    算数运算符用于对数字执行算数运算:

    运算符描述
    + 加法
    - 减法
    * 乘法
    / 除法
    % 系数
    ++ 递加
    -- 递减

    注释:JS 算数这一章对算数运算符进行了完整描述。

    JavaScript 赋值运算符

    赋值运算符向 JavaScript 变量赋值。

    运算符例子等同于
    = x = y x = y
    += x += y x = x + y
    -= x -= y x = x - y
    *= x *= y x = x * y
    /= x /= y x = x / y
    %= x %= y x = x % y

    加法赋值运算符(+=)向变量添加一个值。

    JavaScript 比较运算符

    运算符描述
    == 等于
    === 等值等型
    != 不相等
    !== 不等值或不等型
    > 大于
    < 小于
    >= 大于或等于
    <= 小于或等于
    ? 三元运算符

    注释:JS 比较这一章中完整描述了比较运算符。

    JavaScript 逻辑运算符

    运算符描述
    && 逻辑与
    || 逻辑或
    ! 逻辑非

    注释:JS 比较这一章中完整描述了逻辑运算符。

    JavaScript 类型运算符

    运算符描述
    typeof 返回变量的类型。
    instanceof 返回 true,如果对象是对象类型的实例。

    注释:JS 类型转换这一章完整描述了类型运算符。

    JavaScript 位运算符

    位运算符处理 32 位数。

    该运算中的任何数值运算数都会被转换为 32 位的数。结果会被转换回 JavaScript 数。

    运算符描述例子等同于结果十进制
    & 5 & 1 0101 & 0001 0001 1
    | 5 | 1 0101 | 0001 0101 5
    ~ ~ 5 ~0101 1010 10
    ^ 异或 5 ^ 1 0101 ^ 0001 0100 4
    << 零填充左位移 5 << 1 0101 << 1 1010 10
    >> 有符号右位移 5 >> 1 0101 >> 1 0010 2
    >>> 零填充右位移 5 >>> 1 0101 >>> 1 0010 2

    上例使用 4 位无符号的例子。但是 JavaScript 使用 32 位有符号数。

    因此,在 JavaScript 中,~ 5 不会返回 10,而是返回 -6。

    ~00000000000000000000000000000101 将返回 11111111111111111111111111111010。

    注释:我们将在 JS 位运算这一章为您详解位运算符。

     

    9.关于NaN的说法正确的是

    A  NaN的数据类型为数字类型 也就是 typeof(NaN)的结果为number
    B  NaN == NaN 返回true
    NaN不等于任何数,包括自己本身,NaN == NaN 返回false
    D  如果已知变量num不是数字,那么num == NaN 将得到true
     
    正确答案: A,C
    解析:

    NaN指not a number,但是typeof(NaN)返回值却是“number”,所以他是数字类型,A正确

    Boolean(NaN)返回值为false,B错误

    NaN与任何值进行运算,都得到NaN,C正确

    NaN不能用关系运算符跟任意值比较都返回false,判断一个数是否为NaN需使用全局函数isNaN(),D错误

    什么是 NaN
    在 MDN 的 NaN 文章中有描述:

    全局属性 NaN 表示 Not-A-Number 的值。
    NaN 是一个全局对象的属性。
    NaN 属性的初始值就是 NaN,和 Number.NaN 的值一样。
    在 ES5 中, NaN 属性是一个不可配置(non-configurable),不可写(non-writable)的属性。但在 ES3 中,这个属性的值是可以被更改的,但是也应该避免覆盖。
    通常都是在计算失败时,作为 Math 的某个方法的返回值出现的(例如:Math.sqrt(-1))或者尝试将一个字符串解析成数字但失败了的时候(例如:parseInt("blabla"))。
    NaN 的类型
    typeof NaN // "number"
    也就是说 NaN 是一种特殊的 Number 类型值。

    什么时候会返回 NaN
    JavaScript 权威指南 中『3.1.3 JavaScript 中的算数运算』章节里有描述:

    无穷大除以无穷大、给任意负数做开方运算 或者 算数运算符与不是数字或无法转换为数字的操作数一起使用时都将返回 NaN。

    可分开解释为以下等情况:

    无穷大除以无穷大
    给任意负数做开方运算
    算数运算符与不是数字或无法转换为数字的操作数一起使用
    字符串解析成数字
    以下结果都是 NaN:

    Infinity / Infinity; // 无穷大除以无穷大
    Math.sqrt(-1); // 给任意负数做开方运算
    'a' - 1; // 算数运算符与不是数字或无法转换为数字的操作数一起使用
    'a' * 1;
    'a' / 1;
    parseInt('a'); // 字符串解析成数字
    parseFloat('a');
    这里的『无法转换为数字的操作』又是什么鬼?

    先看下面可以转换为数字的操作例子:

    Math.sqrt('4'); // 2
    2 * '2'; // 4
    '4' / 2; // 2
    无法转换为数字的操作
    这里涉及到 JavaScript 的 类型转换 的概念。

    JavaScript 权威指南 『3.8 类型转换』章节有描述:

    如果 JavaScript 期望使用一个数字,它把给定的值将转换为数字(如果转换结果无意义的话将返回 NaN)。

    可以使用 Number() 方法做显式类型转换,举例:

    Number('1'); // 1
    Number(null); // 0
    Number('a'); // NaN
    也可以使用一元运算符 + 做隐式转换,举例:

    +'1'; // 1
    +null; // 0
    +'a'; // NaN
    也可以使用全局函数 parseInt() 和 parseFloat() 解析整数和浮点数,举例:

    parseInt('12'); // 12
    parseInt('12a'); // 12
    parseInt('a12'); // NaN
    parseInt(null); // NaN
    parseInt() 和 parseFloat() 可以简单理解为:

    尽可能解析更多数值字符,并且忽略后面的内容;如果第一个非空格字符是非数字,则会返回 NaN

    需要注意的是 Number() 和 parseInt()``parseFloat() ,对某些输入值的处理不同,如 null。

    非数字类型转换 为 数字类型,如下表汇总:

    值                                                数字
    undefined                                    NaN
    null                                                 0
    true                                                 1
    false                                               0
    "" (空字符串)                                  0
    "1.2" (非空,数字)                          1.2
    "one" (非空,非数字)                  NaN
    [] (任意对象)                                      0
    [9] (一个数字元素)                           9
    ['a'] (其他数组)                                  NaN
    function(){} (任意函数)                     NaN
    如何判断 NaN
    首先全局的 isNaN() 函数不能严格判断输入值是否为 NaN。

    isNaN() 的怪异行为
    在 MDN 的 isNaN() 文章中对 非数值参数 所表现的『怪异行为』有解释:

    它会先尝试将这个参数转换为数值,然后才会对转换后的结果是否是 NaN 进行判断。

    因此,对于能被强制转换为有效的非 NaN 数值来说,返回 false 值也许会让人感觉莫名其妙。

    如下例子:

    isNaN('37'); // false: 可以被转换成数值 37
    isNaN(''); // false: 空字符串被转换成 0
    严格判断 NaN
    参考 MDN 中 Number.isNaN() 的 Polyfill 代码: typeof value === 'number' && isNaN(value);

    10.下面声明变量及赋值的写法正确的有

    A  var  _myName = 12a
    B  var  _myName = "12a"
    C  var  myName = 12
    D  var  $myName = true
     
    正确答案: B,C,D
    解析:

    A选项 12a是字符串,不是纯数字,字符串要用引号

    一、声明变量
    使用关键字:let、const、var来声明变量。

    const:用于声明常量。
    var: 定义的变量的时候,若没有初始化,不报错,会输出undefined。其值之后可以修改。
    let:(ES6新增)块级作用域 。在块级{}里面用let定义的变量,离开当前的块{}之后,就不能使用(有点像局部变量,但作用域不一样)。
    注意:

    const 定义变量不可以修改,必须同时初始化;
    var 定义的变量可以修改,若不初始化会输出undefined,不报错;
    var 全局声明的变量会自动添加为window对象的属性,let不会;
    let {…}一对花括弧就是一个特定的代码块,包括直接的{},流程语句的{},函数的{},…。函数声明时本身就带有{},也是属于一个代码块;
    不使用任何关键字声明,直接给变量赋值不会报错(一种特殊写法),但仅仅在有值时不会报错。
    <script>
    a=1;
    console.log(a);//1
    </script>

    如图:

    <script>
    a;
    console.log(a);
    </script>

    如图:


    二、变量赋值
    1. 先声明,后赋值 ;
    <script>
    var a;
    console.log(a);//undefined,不会报错
    a=1;
    console.log(a);//1
    </script>

    2. 声明的同时进行赋值;
    <script>
    var a=1;
    console.log(a);//1
    </script>

    3. 一次性声明多个变量;
    <script>
    var a,b,c;
    console.log(a,b,c);//undefined undefined undefined
    a=b=c=1;
    console.log(a,b,c);//1 1 1
    a=1;
    b=2;
    c=3;
    console.log(a,b,c);//1 2 3
    </script>

    4. 一次性声明多个变量同时赋值。
    <script>
    var a=1,b=2,c=3;
    console.log(a,b,c);//1 2 3
    </script>

    三、声明覆盖的问题
    变量值是可以重新赋值的,常量不可以;
    var 是可以重新声明的,let 、 const不可以;
    四、变量命名的规范
    1. 变量命名严格区分大小写
    e.g.:下面变量name,Name在JS中被视为完全不同的变量名称

    <script>
    var name = 'name';
    var Name;
    console.log(name,Name);//name undefined
    </script>
    2. 开始必须是字母or下划线or$符号,后续可跟字母,数字,下划线,$符号
    3. 不能使用 关键字 和 保留字 作为变量名
    关键字(keyword):即程序中已经开始使用的字符。是一些被JS赋予含义和功能的单词,是js语言的本身的一部分。e.g. window,var,let……

    保留字(Reserved Word):保留字是语言中定义过的字,尽管保留字在JavaScript中还没有特定的用途,但它们很有肯能在将来被用作关键字。使用者不能将这些字作为变量名或过程名使用。e.g. int,short……

    注:
    但是,可以使用关键字/保留字作为变量名称的一部分,e.g. someString……

    4. 变量的命名一定要有实际意义
    5. 命名不得包含空格
    6. 除下划线以外,变量名称中不能使用任何类型的任何标点符号
    7. JS中的命名习惯
    驼峰命名法:适用于长单词
    e.g. getElementByClassName、getData
    首字母大写
    e.g. Date()、Object()

  • 相关阅读:
    HTML基础之HTML标签-html header(meta,title) html body(p,br,h,form,div,span,input,lable)
    day5_非空即真非零即真
    day5_不能循环删除list-深拷贝、浅拷贝(import copy)
    day5_函数返回值
    day4_局部变量和全局变量
    day5_函数的参数
    python字符串与列表的相互转换
    python自动化返回:no tests were fount Empty test suite
    读取Excel数据封装
    测试工程题
  • 原文地址:https://www.cnblogs.com/FD-1909/p/11780756.html
Copyright © 2020-2023  润新知