javascript练习笔记

安利学习网站 http://how2j.cn/

简要介绍

JavaScript必须放在script标签中。标签可以放在HTML的任何地方,一般放在head标签里。

如果有多段script代码,会按照从上到下的顺序依次执行。

JavaScript同css一样,可以从HTML中剥离出来,形成一个单独的文件,在HTML中引用即可。

注释

//单行注释
/*
多行注释
*/

变量

JavaScript在设计之初,为了方便初学者学习,并不强制要求用var申明变量。这个设计错误带来了严重的后果:如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量:

//使用var
  var x = 10;
  document.write("变量x的值:"+x);
//不使用var
  x = 10;
  document.write("没有声明var变量x的值:"+x);
//变量命名规则和java相似
//开头可以用 _$和字母 ,其他部分可以用 $ _ 字母或者数字

<script>
  var b=012;//第一位是0,表示八进制
  var c=0xA;//0x开头表示十六进制
  var d=3.14;//有小数点表示浮点数
  var e=3.14e2;//使用e的幂表示科学计数法
  document.write("十进制 10 的值: "+a);
  document.write("<br>");
  document.write("八进制 012 的值: "+b);
  document.write("<br>");
  document.write("十六进制 0xA 的值: "+c);
  document.write("<br>");
  document.write("浮点数 3.14 的值: "+d);
  document.write("<br>");
  document.write("科学记数法 3.14e2 的值: "+e);
  document.write("<br>");
    //与java不同的是,javascript中没有字符的概念,只有字符串,所以单引号和双引号,都用来表示字符串。
      var x='hello '; //单引号
  var y="javascript"; //双引号,打印出来一样的效果
</script>

调试方法

1.alert(1),会弹出对话框,内容为alert内容(类似于print进行检测)

2.利用浏览器调试

这里准备了一段故意写错的javascript代码。 点击快捷键F12,就会出现console页面。 console是控制台的意思,用于输出一些错误和调试信息。 注意: 虽然这段javascript代码有错误,但是第一次F12是看不到错误的,因为错误已经发生了,才打开了F12。 所以打开了F12之后,使用快捷键F5刷新一下当前页面,就可以看到控制台报出了错误的原因 document.write1 is not a function 这样定位问题就非常方便了 。【console里会出现:TypeError】

此外还有console.log()等方法,可以进行学习浏览器控制台方法。

3.try_catch

<script>
 
function f1(){
  //函数f1是存在的
}
try{
   document.write("试图调用不存在的函数f2()<br>");
    f2();  //调用不存在的函数f2();
}
catch(err){//注意这里用的是error
   document.write("捕捉到错误产生:");
    document.write(err.message);
}
 
document.write("<p>因为错误被捕捉了,所以后续的代码能够继续执行</p>");
 
</script>

类型转换

介绍&转字符串
<script>
  var a="hello javascript";
  document.write("变量a的类型是:"+(typeof a));//NOTICE
  document.write("<br>");
  document.write("变量a的长度是:"+a.length);
</script>


利用toString转换为字符串类型
String()和toString()一样都会返回字符串,区别在于对null的处理
String()会返回字符串"null"
toString() 就会报错,无法执行
<script>
  var a=10;
  document.write("数字 "+a+" 转换为字符串"+a.toString());
  document.write("<br>");
 
  var b=true;
  document.write("布尔 "+b+" 转换为字符串"+b.toString());
  document.write("<br>");
 
  var c="hello javascript";
  document.write("字符串 "+c+" 转换为字符串 "+c.toString());
  document.write("<br>");
 
</script>

数字转字符串有默认模式和基模式两种

<script>
  var a=10; 
  document.write('默认模式下,数字10转换为十进制的'+a.toString()); //默认模式,即十进制
  document.write("<br>"); 

  document.write('基模式下,数字10转换为二进制的'+a.toString(2)); //基模式,二进制
  document.write("<br>"); 
  
  document.write('基模式下,数字10转换为八进制的'+a.toString(8)); //基模式,八进制
  document.write("<br>"); 

  document.write('基模式下,数字10转换为十六进制的'+a.toString(16)); //基模式,十六进制
  document.write("<br>"); 

</script>
字符串转数字

字符串转数字,很像java,不过不用对象,直接使用parseInt即可。

Number()和parseInt()一样,都可以用来进行数字的转换 区别在于,当转换的内容包含非数字的时候,Number() 会返回NaN(Not a Number) parseInt() 要看情况,如果以数字开头,就会返回开头的合法数字部分,如果以非数字开头,则返回NaN

<script>
  document.write("字符串的\"10\"转换为数字的:"+parseInt("10")); //转换整数
  document.write("<br>");
  document.write("字符串的\"3.14\"转换为数字的:"+parseFloat("3.14"));//转换浮点数
  document.write("<br>");
  document.write("字符串的\"10abc\"转换为数字的:"+parseInt("10abc")); //判断每一位,直到发现不是数字的那一位
  document.write("<br>");
 
  document.write("字符串的\"hello javascript\"转换为数字的:"+parseInt("hello javascript")); //如果完全不包含数字,则返回NaN - Not a Number
  document.write("<br>");
 
</script>
Boolean

使用内置函数Boolean() 转换为Boolean值 当转换字符串时: 非空即为true 当转换数字时: 非0即为true 当转换对象时: 非null即为true

Boolean(转换对象)

函数

<script>
function print(){
  document.write("这一句话是由一个自定义函数打印");
}
print();//函数需要调用
</script>

返回值可有可无,根据需要增加参数和返回值。

事件

事件是javascript允许html与用户交互的行为。 用户任何对网页的操作,都会产生一个事件。 事件有很多种,比如鼠标移动,鼠标点击,键盘点击等等。 本例演示当一个按钮被点击的时候,弹出一个对话框

符号

JavaScript函数、符号等用法和Java相似。+在有字符串时表示字符串的连接。

比较

要特别注意相等运算符==。JavaScript在设计时,有两种比较运算符:

第一种是==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;(比如数字1==字符‘1’)

第二种是===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。

由于JavaScript这个设计缺陷,不要使用==比较,始终坚持使用===比较。

另一个例外是NaN这个特殊的Number与所有其他值都不相等,包括它自己:

NaN === NaN; // false

唯一能判断NaN的方法是通过isNaN()函数

isNaN(NaN); // true

比较float数,不能直接比较。

要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值:

Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true

用的不太熟的java语法

switch (day)
{
case 0:
  today="星期天";
  break;
case 1:
  today="星期一";
  break;
case 2:
  today="星期二";
  break;
case 3:
  today="星期三";
  break;
case 4:
 today="星期四";
  break;
case 5:
  today="星期五";
  break;
case 6:
  today="星期六";
  break;
}
var o = {
    name: 'Jack',
    age: 20,
    city: 'Beijing'
};
for (var key in o) {
    console.log(key); // 'name', 'age', 'city'
}
for循环的一个变体是for ... in循环,它可以把一个对象的所有属性依次循环出来

实验三所得

border-collapse:collapse;<!-- 为表格设置合并边框模型 -->
可用getset方法,在JavaScript中实现得到设置input中的内容

对象

new String() new Number()

进行typeof 检测,得到object

直接 var a="sd" typeof 为string 为number

字符串操作
var x = new String("Hello");
var y = new String("Hello");
var z = new String("aloha");
通过 localeCompare()判断 x和y是否相等 0
通过 localeCompare()判断 x和z是否相等 1
0 表示相等
1 表示字母顺序靠后
-1 表示字母顺序靠前

split 根据分隔符,把字符串转换为数组。

<script>
var x = new String("Hello This Is JavaScript");
document.write( '字符串x的值: '+x);
document.write('<br>');
 
var y =  x.split(" ");
document.write('通过空格分隔split(" "),得到数组'+y);
document.write("<br>");
 
var z =  x.split(" ",2);
document.write('通过空格分隔split(" ",2),得到数组,并且只保留前两个'+z);
  
</script>
字符串x的值: Hello This Is JavaScript
通过空格分隔split(" "),得到数组Hello,This,Is,JavaScript
通过空格分隔split(" ",2),得到数组,并且只保留前两个Hello,This

replace(search,replacement)

找到满足条件的子字符串search,替换为replacement

注: 默认情况下只替换找到的第一个子字符串,如果要所有都替换,需要写成:

x.replace(/a/g, "o");【a->o】

或者

var regS = new RegExp("a","g");

x.replace(regS, "o");

字符串处理:很多时候需要正则表达式

需要注意的是,所有返回字符串类型的方法,返回的都是基本类型的String

charAt返回的值H 其类型是string concat返回的值Hello JavaScript!!! 其类型是string substring返回的值Hello 其类型是string

数组
  1. new Array() 创建长度是0的数组
  2. new Array(5); 创建长度是5的数组,,但是其每一个元素都是undefine
  3. new Array(3,1,4,1,5,9,2,6); 根据参数创建数组
 var x=new Array(2,1,3) 直接打印:2,1,3
    for(i in x){
        document.write(x[i]);
    }
    document.write(x.join())得到字符串
    document.write(x.join("@"))
x.sort(comparator);【自定义排序方法】
x.sort();

**方法 push pop,分别在最后的位置插入数据和获取数据(获取后删除) 就像先入后出的栈一样 **

**方法 unshift shift ,分别在最开始的位置插入数据和获取数据(获取后删除) **

方法 sort对数组的内容进行排序

方法 reverse,对数组的内容进行反转

<script>
    function check(value,a) {
        for(i in a){
            if(value==a[i])
                return true;
        }
        return false;
    }
    function removeDul(a) {
        var result=new Array();
        while(a.length!=0){
            var v =a.pop();
            if(!check(v,a)){
                result.push(v)
            }
        }
        return result;
    }
    var x=new Array(1,2,4,5,5,2,0);
    x=removeDul(x);
    x.sort();

</script>

方法 slice 获取子数组

方法 splice (不是 slice) 用于删除数组中的元素 奇葩的是 ,它还能用于向数组中插入元素

方法 concat 连接两个数组

JavaScript的Array可以包含任意数据类型,并通过索引来访问每个元素。

要取得Array的长度,直接访问length属性:

var arr = [1, 2, 3.14, 'Hello', null, true];
arr.length; // 6

请注意,直接给Arraylength赋一个新的值会导致Array大小的变化:

日期

[以下除第一个外应该返回的都是数字]

<script>
  var d = new Date();
  document.write('new Date():'+d);
  document.write('分别获取年月日: ');
  document.write(d.getFullYear());
  document.write("/");
  document.write(d.getMonth()+1);
  document.write("/");
  document.write(d.getDate());
    document.write("分别获取时:分:秒:毫秒 ");
  document.write(d.getHours());
  document.write(":");
  document.write(d.getMinutes());
  document.write(":");
  document.write(d.getSeconds());
  document.write(":");
  document.write(d.getMilliseconds());
</script>

创建对象的三种操作

1通过new Object()创建一个对象 ‘

<script>
var hero = new Object();
hero.name = "盖伦"; //定义一个属性name,并且赋值
hero.kill = function(){
  document.write(hero.name + " 正在杀敌" ); //定义一个函数kill
}
  
hero.kill(); //调用函数kill
  
</script>

2.通过new Object创建对象有个问题,就是每创建一个对象,都得重新定义属性和函数。这样代码的重用性不好 那么,采用另一种方式,通过function设计一种对象。 然后实例化它 。 这种思路很像Java里的设计一种类,但是 javascript没有类,只有对象,所以我们叫设计一种对象

<script>
function Hero(name){
  this.name = name;
  this.kill = function(){
     document.write(this.name + "正在杀敌<br>");
  }
}
 
var gareen = new Hero("盖伦");
gareen.kill();
 
var teemo = new Hero("提莫");
teemo.kill();
  
</script>

3.现在Hero对象已经设计好了,但是我们发现需要追加一个新的方法keng(),那么就需要通过prototype实现这一点

<script>
function Hero(name){
  this.name = name;
  this.kill = function(){
     document.write(this.name + "正在杀敌<br>");
  }
}
  
var gareen = new Hero("盖伦");
gareen.kill();
  
var teemo = new Hero("提莫");
teemo.kill();
  
Hero.prototype.keng = function(){
  document.write(this.name + "正在坑队友<br>");
}
  
gareen.keng();
teemo.keng();
  
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容