#基础知识#JavaScript

1、toString()方法,返回字符串,但是null和underfined没有这个方法。toString() 可以转化为不同进制的字符串。

var n=10;
alert(n.toString(2));  //1010

     String()方法,(若值是nul则返回null;若值是underfined则返回underfined)。 

var n=null;
alert(String(n));

两者都是讲其他类型的变量转化为字符串的方法;注意两者的书写方式。

2、操作符:递增和递减

前置:变量的值是在语句被求值以前改变的。

var n=2;
var m=--n+1;
console.log(n,m);  //1, 2

后置:递增递减操作在包含他们的语句被求值后才执行

var n=2;
var m=n--+1;
var q=n+1;   (由于上一行代码已经执行过后置递减运算,此时的n已经为1)
console.log(n,m,q); // 1, 3, 2  (n的值最终是一样的,但是在执行的时候不同)

3、布尔操作符

var obj = pObject || bObject;

        变量obj 将被赋予等号后面两个值中的一个。如果pObject 的值不是null,那么它的值将被赋予obj;如果是null,则将bObject赋值给obj。

逻辑与 && 和逻辑或 ||  都是短路操作符。

4、关系操作符 >  <      (字符串比较时候的奇怪现象)(字符串和数值比较,先把字符串转换为数值)

var re="Bhhh" < "annn";   //true
  • 字符串的比较是对应的字符编码值,字母B的字符编码为66,而字母a的字符编码为97。
var re="23" < "3";    //true
  • “2”的字符编码是50,“3”的字符编码是51
  • NaN与任何操作数进行关系比较,结果都是false。NaN不等于NaN。
  • null 与 underfined 是相等的
null == undefined ; //true  相似的值
null === undefined;  //false 不同类型的值
5、  instanceof 用于检测是什么类型的对象(array、object)

        typeof  检测基本数据类型(boolean、number)

6、 函数的参数是按值传递的

function setName(obj) { 
    obj.name = 'zjzhome'; 
    obj = new Object();
    obj.name = 'zjz' 
}

var person = new Object();

setName(person);

console.log(person.name);   //  zjzhome
7、for...in 和for...of的区别
Array、Map和Set都属于iterable类型。
for ... in循环遍历对象属性名称,将把name包括在内,但Array的length属性却不包括在内。
var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x in a) {
    console.log(x); // '0', '1', '2', 'name'
}
for ... of循环则完全修复了这些问题,它只循环集合本身的元素:
var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x of a) {
    console.log(x); // 'A', 'B', 'C'
}
8、重排序方法:reverse()和sort()
sort() :
values=[0,1,5,15,13];
values.sort();   //(5) [0, 1, 13, 15, 5]
正常升序:
function compare (value1,value2) {
    if (value1 < value2) {
        return -1;
    }  else if (value1 >value2) {
        return 1;
    } else {
        return 0;
    }
}

values=[0,1,5,15,13];
values.sort(compare);    //(5) [0, 1, 5, 13, 15] 
reverse():
values=[0,1,5,15,13];
values.reverse();   //(5) [13, 15, 5, 1, 0]

9、迭代方法:map()

    map() 返回一个数组,而这个数组中的每一项都是在原始数组中的对应项上运行传入函数的结果。(方法适用于创建包含的项与另一个数组一一对应的数组)

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var results = arr.map(pow);             // [1, 4, 9, 16, 25, 36, 49, 64, 81]
10、归并方法:reduce()

    reduce()  函数返回的任何值都会作为第一个参数自动传给下一项。

var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
    return x + y;
});             // 25

 11、RegExp类型

var exp=/pattern/flags

pattern(模式):正则表达式;

flags(标志):g(全局global)、i(不区分大小写case-insensitive)、 m(多行multiline);

12、function函数 (函数声明和函数表达式)

 函数声明:解析器通过函数声明变量提升,读取并将函数声明添加到执行环境中。即使声明函数的代码在调用它的代码后面,JavaScript引擎也能把函数声明提升到顶部。

alert (sum(10,10));   //完全能够输出 20 
function sum(num1.num2){
    return num1+num2;
}

    作为值的函数:

 
 
function add(num){
    return num+10;
}
function numberFunction(s,o){
    return s(o);    //第一个参数表示函数,第二个参数表示值
}
var result = numberFunction(add,10);//要访问函数的指针而不执行函数的话,必须去掉函数名后面的大括号
alert(result);

13、函数内部属性:

函数内部的一个对象arguments有一个名叫callee的属性,返回正在被执行的对象。

function factorial(num){  //用于迭代
    if(num<=1){
        return 1;
    }else {
        return num*arguments.callee(num-1)  //消除紧密耦合现象
    }
}

 14、call()和apply() 扩充函数赖以运行的作用域

call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的。

var func1 = function(arg1, arg2) {
   ...
};

就可以通过 func1.call(this, arg1, arg2); 或者 func1.apply(this, [arg1, arg2]); 来调用。其中 this 是你想指定的上下文,call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。

猜你喜欢

转载自blog.csdn.net/weixin_41892205/article/details/80142867