JavaScript学习要点(一)

<!DOCTYPE html>
<html>
<head>
    <title>Example Html Page</title>
</head>
<body>
<script type="text/javascript" src="Example.js"></script>
</body>
</html>>

在Html中插入JavaScript的方法,将Script放在body中相比于放在head中可以提高加载速度,因为页面执行到body才开始加载

defer可以使语句延迟执行
<script type="text/javascript" defer="defer" src="Example.js"></script>
与Swift中的defer不同,当存在多个defer时,前一个defer先于后一个defer执行

typeof会以字符串的方式返回所给参数的类型

声明但没有初始化的变量默认值是undefined,但没声明过的不是
但typeof以未声明变量作参数时也会返回undefined

null表示一个空对象指针,undefined派生于null

“” 与 ‘’在使用中相同,都表示字符串,但需要匹配

1e2 = 100, 1e+2 = 100, 1e-2 = 0.01

var message ="Hello world"
if (message) {
    alert("value is true")
}

经此if判断过后,message的值变为true,变量类型也右String转换成了Bool

当定义Number时,若先导为0x则以十六进制数解析,先导为0时以八进制数解析,但若字面值的数值超过了范围,先导0就会被忽略,按十进制处理

浮点数中必须含有一个小数点,小数点后至少有一位数字,若没有数字或.0就会被转换为整数

浮点数在进行算数计算的时候精度远远不足

NaN is NaN,10 is not NaN, true is not NaN, “10” is not NaN, “blue” is NaN

parseInt的最佳实践
var number = parseInt(“29”,10)

parseFloat忽略第二个小数点及以后的值

var o  = new object()

在对非数值类型使用一元操作符+时,会将其转换为number,-会将其转化为number之后取负

== 代表转换后equal === 代表identical

with的作用是将代码的作用域设置到同一个对象上
var qs = location.search.substring(1);
var hostname = location.hostname;
var url = location.href;

with(location) {
    var qs = search.substring(1);
    var hostname = hostname;
    var url = href;
}

在该语言中Switch一般case后面都有break; default后没有

function sum(num1, num2) {
    return num1 + num2;
}

函数体并不介意你传递进来的参数有多少、是什么类型,参数被统一装到一个数组里传递给函数,用arguments[]来获取不同参数。

在函数体内调用,arguments.length可获得参数的个数

function sum(num1, num2) {
    if (arguments.length = 1) {
        return num1 + 10;
    } else if (arguments.length = 2) {
        return num1 + num2;
    }
}

即便定义时定义了两个参数,也可以只传一个进去,ECMAScript中所有的参数都是值类型,但arguments[]内的各个值和传进来的参数始终保持同步,定义但没被传入的会被赋予undefined

JS中没有重载,后定义的会覆盖先前定义的

JS中分为基本类型和引用类型

对于引用类型
var person = new Object();
person.name = “A";
alert(person.name);

你可以为其添加属性和方法,只要该对象不删除,属性和方法会一直存在

基本类型不可以这么做,虽然不会报错

基本类型是复制,引用类型是指针传递

function setName(obj) {
    obj.name = "A";
    obj = new Object();
    obj.name = "B";
}

var person = new Object();
setName(person);

person.name这时候是A
举个例子,就像是配了把钥匙,仍然能开原来的锁,但是你把这个钥匙锻成能开别的锁,原来那把钥匙仍然没有变

检测基本类型的变量类型用typeof

var s = “A"
typeof s //String

检测引用类型的变量类型用instanceof

result = variable instanceof constructor
result是bool

基本类型用instanceof的时候总返回false,因为基本类型不是对象

JS中没有块级作用域,for、with等中定义的变量外面也能用

函数有自己的环境,初始化变量时使用了var,就会被添加到最近的环境中,如果没用,就会被自动添加到全局环境中

当需要引用到一个标识符的时候,会从最近的环境开始沿着作用域链向上找,找到就停止,直到找到全局环境,没有则返回undefined

而且好像相互包含的环境中变量名也可以相同

var element = document.getElementById(“some_element”);
var myObject = new Object();
myObject.element = element;
element.someobject = myObject;

这样就存在了循环引用,永远留在内存之中

通过
myObject.element = Null;
element.someObject = Null;
来消除循环引用

Swift 中用的是 unowned weak

通过将一个值赋予 null 来手工解除引用以便垃圾收集器下次将其回收

function displayInfo (args) {
     var output = “”;
     
     if (typeof args.name == “string”) {
          output += args.name;
     }
     
     if (typeof args.age == “number”) {
          output += args.age;
     }
     alert(output);
}

传进去的args可以有name或age也可以都没有

displayInfo({
     name: "A",
     age: 29
});

通过方括号表示法可以用变量来访问属性

var colors = new Array();
var colors = new Array(20); //如果事先知道
var colors = new Array(“A”,”B");

若里面放了数字,创建给定项数的数组,如果是别的,创建给定内容的,只有一项的数组

创建数组时,new可以被省略,也可以直接用方括号(妈个鸡不早说)

var colors = []; //空数组

var colors = new Array(“A”,”B");
colors[2] = “C"
不像C一样,JS超过范围,数组会自动增加到该索引值加1的长度

.length用来返回数组的长度

而且length这个属性不是只读的,length缩小,后面的值变为undefined,length增大,多出的每一项都是undefined

用colors[colors.length]就可以在数组的后面添加新元素

通过Array.isArray(value)可判断value是不是数组

colors.toString() 会返回每个值的字符串形式拼接而成的一个以逗号分隔的字符串,而调用valueOf返回的还是数组

var person1 = {
    toLocalString: function () {
        return "A"
    }

    toString: function() {
        return "B"
    }
}

console.log(Object.prototype.toString.call([])); //可以用来判断是数组还是对象
用instanceOf存在跨页面问题

alert(colors.join(“,"))

数组存在栈方法push(),和pop()

pop()不给参数返回值是最后一项,push()给参数被添加在数组最后

队列方法shift()取得第一项,数组长度减一,用push()从后面推入
数组的unshift()方法从数组前面推入任意数目的项,用pop()取最后一项

reverse()函数用来倒序
sort()默认是用toString()比,一般结果都比较不靠谱,应传入比较函数,第一个在前就返回负数

concat方法用于添加数组元素
var colors = ["red", "green", "blue"];
var colors2 = colors.concat("yellow", ["black", "brown"]);
alert(colors2); //red,green,blue,yellow,black,brown

slice方法用于截取,不包括结束位置,不改变原数组
var colors = ["red", "green", "blue", "yellow", "purple"];
var colors2 = colors.slice(1); //green,blue,yellow,purple
var colors3 = colors.slice(1,4) //green,blue,yellow

数组拥有splice方法
splice(0,2),删除数组中的前两项
splice(2,0,”red”,”green”),从位置2开始,删除0个字符,再插入red和green

数组的indexOf()方法和lastIndexOf()方法,用于查找特定项的位置,一个是从前向后,另一个反过来,没有找到返回-1
var numbers = [1,2,3,4,5,4,3,2,1];
alert(numbers.indexOf(4,4)); //5
alert(numbers.lastIndexOf(4,4)); //3

数组有五个迭代方法
every():对数组中的每一项运行给定函数,每一项为真则为真
filter():每一项都运行,返回会返回真的项所组成的数组
forEach():对数组的每一项运行给定函数,没返回值
map():每一项都运行给定函数,返回每次结果组成的数组
some():若有任意一项返回为true,则返回true

每个方法接收两个参数,第一个是要运行的函数,第二个是运行该函数的作用域对象(可选)
运行的函数会接收三个参数,数组每一项的值,该项在数组中的位置和数组本身

var numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(item,index,array){
    return (item > 2);
})

var mapResult = numbers.map(function(item,index,array){
    return item * 2;
})

数组有缩小方法reduce()和reduceRight(),会迭代所有项,返回一个值,一个从前向后,一个反过来

每个方法接收两个参数,一个在每一项上调用的函数,一个作为缩小基础的初始值(可选)
调用的函数会接收四个参数,前一项,当前项,索引,和数组本身

var values = [1,2,3,4,5];
var sum = values.reduce(function(prev,cur,index,array){
    return prev+cur;
})

reduceRight()从后往前一个意思
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值