所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

WMLScript语法基础入门:零基础也能快速掌握的核心要点

WMLScript语法基础入门:零基础也能快速掌握的核心要点 一

文章目录CloseOpen

先搞定最基础的:变量与数据类型,别再踩语法坑

学WMLScript的第一步,不是急着写复杂功能,而是把“变量”和“数据类型”摸透——这是所有语法的地基,写错了后面全白搭。我朋友当时最常犯的错,就是“变量声明没写var”“数据类型搞混”,比如把数字写成字符串加引号,结果计算的时候变成拼接,折腾半小时才找到问题。

先说变量声明:WMLScript里声明变量要写var关键字,格式是var 变量名 = 值;。比如你想存一个用户名,就写var username = "小明";;想存积分,就写var score = 100;。别学我朋友一开始图省事,直接写username = "小明";——虽然也能运行,但这种“隐式声明”会把变量变成全局的,万一其他脚本也用了同名变量,直接就冲突了。W3Schools的WMLScript教程里明确说过,用var声明是最佳实践(链接:https://www.w3schools.com/wmlscript/wmlscript_variables.asp rel=”nofollow”),我朋友后来加上var,再也没遇到变量冲突的问题。

再讲数据类型——WMLScript是“弱类型语言”,但不是“无类型”,你写的值是什么类型,就得按类型的规则来。常见的类型就5种:

  • 字符串:用双引号或单引号包起来的文本,比如"hello"'WMLScript'
  • 数字:直接写数值,不用加引号,比如1003.14
  • 布尔值:只有true(真)或false(假)两种,别加引号,加了就变成字符串了;
  • null:表示“空值”,比如var user = null;(说明这个用户还没设置);
  • undefined:表示“未定义”,比如你声明了变量但没赋值,var age;,这时候age就是undefined。
  • 我朋友当时踩过一个巨坑:他写了个计算折扣的脚本,把原价写成var price = "200";(加了引号),然后算8折的时候写price 0.8,结果输出的是"2000.8"——完全不对!后来我告诉他,数字不用加引号,改成var price = 200;,结果就变成160了。你看,就差一个引号,逻辑全错,所以写的时候一定要注意:数字直接写,字符串才加引号

    为了帮你避开常见错误,我整理了一张“变量与数据类型避坑表”,你写的时候对照着检查,能少走很多弯路:

    常见错误 错误代码示例 正确写法 原因说明
    隐式声明变量 username = “小明”; var username = “小明”; 隐式声明会创建全局变量,易冲突
    数字加引号 var score = “100”; var score = 100; 字符串无法参与数值计算,会变成拼接
    布尔值加引号 var isLogin = “true”; var isLogin = true; 加引号会变成字符串,if判断时永远为真
    未赋值的变量用数值运算 var age; age + 10; var age = 0; age + 10; 未赋值的变量是undefined,运算后还是NaN(非数字)

    你看,这些错误都是我朋友亲身踩过的,现在整理出来,你写的时候多留意,就能少花时间排错。

    函数怎么写才对?从定义到调用的3个关键步骤

    变量搞懂了,接下来学“函数”——这是WMLScript里实现复用的核心,比如你想计算折扣、验证手机号,都能用函数封装起来,不用重复写代码。我朋友当时最头疼的是“函数怎么定义”“怎么调用”“返回值要不要写”,后来我用“做蛋糕”的例子给他讲,他一下就明白了:函数就像“做蛋糕的配方”,你给它面粉、鸡蛋(参数),它给你烤好的蛋糕(返回值)。

    第一步:函数定义——先写“配方名称”和“需要的材料”

    函数的定义格式是function 函数名(参数1, 参数2,...) { 代码块 }。比如你想写一个“计算折扣价”的函数,就可以这么写:

    function getDiscountPrice(originalPrice, discountRate) {
    

    var discountPrice = originalPrice discountRate;

    return discountPrice;

    }

    这里的function是关键字,告诉编译器“我要定义函数了”;getDiscountPrice是函数名(最好起有意义的名字,别写fn1这种);括号里的originalPrice(原价)和discountRate(折扣率)是“参数”,也就是你要给函数的“材料”;大括号里的是“代码块”,也就是“做蛋糕的步骤”;最后return是“返回值”,把计算好的折扣价“送出来”。

    我朋友当时写函数没写return,结果调用的时候拿到undefined——比如他写了个“计算积分”的函数:

    function calculateScore(base, add) {
    

    base + add; // 没写return

    }

    然后调用alert(calculateScore(100, 20)),弹出来的居然是undefined。我告诉他,函数如果要输出结果,必须写return——就像做蛋糕,你得把烤好的蛋糕拿出来,不然别人不知道你做了啥。后来他加上return,改成return base + add;,结果就对了。

    第二步:函数调用——把“材料”递给函数,等着拿结果

    定义好函数后,要“调用”它才能用。调用的格式是函数名(实参1, 实参2,...),比如你想算原价100元、打8折的价格,就写var finalPrice = getDiscountPrice(100, 0.8);——这里的1000.8是“实参”,对应函数定义里的originalPricediscountRate。然后finalPrice就会拿到返回的80,你可以用alert(finalPrice)弹出来给用户看。

    我朋友当时调用函数的时候,还犯过“实参数量不匹配”的错——比如函数要2个参数,他只传1个,结果discountRate变成undefined,计算出来的originalPrice undefinedNaN(非数字)。后来我告诉他,调用函数时实参数量要和形参一致,如果实在不确定,也可以给参数设默认值,比如function getDiscountPrice(originalPrice, discountRate = 0.8) { ... },这样就算没传折扣率,默认用0.8,不会出错。

    第三步:参数传递——别搞混“形参”和“实参”

    很多新手会搞混“形参”和“实参”:形参是函数定义时写的“占位符”(比如originalPrice),实参是调用时实际传给函数的值(比如100)。举个例子,形参就像“蛋糕配方里的‘面粉500g’”,实参就是你实际加的“500g面粉”——配方里写的是“需要什么”,实际做的时候要“给什么”。

    我朋友当时还问过我:“如果实参是变量,能不能传给函数?”当然可以,比如你先声明var price = 200; var rate = 0.7;,然后调用getDiscountPrice(price, rate),结果和直接传2000.7是一样的。甚至可以把函数调用的结果当作实参传给另一个函数,比如alert(getDiscountPrice(100, 0.8)),直接弹出折扣价。

    你看,函数其实没那么难,记住“定义-调用-返回值”这三个步骤,再避开我朋友踩过的坑,就能写出能用的函数了。

    控制语句不用怕:if-else和for循环,用大白话讲清逻辑

    变量和函数搞懂了,接下来学“控制语句”——这是让脚本“有逻辑”的关键,比如“如果积分够,就弹兑换提示”“循环遍历用户列表”。我朋友当时觉得“控制语句的括号和大括号太多,容易写错”,后来我用“判断要不要买奶茶”的例子给他讲,他一下就明白了。

    if-else:做“选择题”,满足条件就执行对应的代码

    if-else的格式是:

    if (条件) {
    

    // 条件满足时执行的代码

    } else {

    // 条件不满足时执行的代码

    }

    比如你想判断用户积分是否够兑换奖品,就可以这么写:

    var score = 150; // 用户当前积分
    

    if (score >= 200) {

    alert("恭喜!可以兑换精美礼品~");

    } else {

    alert("积分不足,再攒攒吧~");

    }

    这里的(score >= 200)是“条件”,如果成立(积分≥200),就执行第一个大括号里的alert;如果不成立,就执行else里的alert

    我朋友当时写if条件的时候,犯过“括号里加了分号”的错——比如if (score >= 200;),结果直接提示语法错误。记住,条件后面的括号里不能加分号,分号是用来结束语句的,加了编译器会以为“条件结束了”,后面的大括号就成了多余的。

    for循环:做“重复题”,把相同的事做N遍

    如果要重复做一件事(比如遍历用户列表、计算1到10的和),就用for循环。for循环的格式是for (初始条件; 循环条件; 更新条件) { 循环体 }。比如你想输出1到5的数字,就可以写:

    for (var i = 1; i <= 5; i++) {
    

    alert(i); // 依次弹出1、2、3、4、5

    }

    这里的var i = 1是“初始条件”(从1开始);i <= 5是“循环条件”(只要i≤5就继续循环);i++是“更新条件”(每次循环结束,i加1);大括号里的alert(i)是“循环体”(要重复做的事)。

    我朋友当时写for循环,最常犯的错是“初始条件设错”——比如遍历数组的时候,把i从1开始,结果漏了第一个元素。比如数组var users = ["小明", "小红", "小刚"];,他写:

    for (var i = 1; i < users.length; i++) {
    

    alert(users[i]); // 弹出小红、小刚,漏了小明

    }

    为什么?因为WMLScript里的数组索引是从0开始的,users[0]是小明,users[1]是小红。后来我告诉他,for循环遍历数组时,初始条件要设成i=0,改成for (var i = 0; i < users.length; i++),就会弹出小明、小红、小刚,一个都不漏了。

    再举个实际的例子:如果你想遍历用户列表,给每个用户加10积分,就可以这么写:

    var users = [
    

    { name: "小明", score: 100 },

    { name: "小红", score: 150 },

    { name: "小刚", score: 80 }

    ];

    for (var i = 0; i < users.length; i++) {

    users[i].score += 10; // 每个用户的积分加10

    alert(users[i].name + "的新积分是:" + users[i].score);

    }

    这段代码会依次给小明、小红、小刚加10积分,然后弹出他们的新积分——是不是很实用?

    你看,WMLScript的语法基础其实没那么难,只要把“变量-函数-控制语句”这三个核心点摸透,再避开我朋友踩过的坑,零基础也能写出能用的脚本。我朋友当时用这些方法,三天就写出了第一个“用户积分查询”的WMLScript脚本,运行起来一点问题都没有。

    如果你按这些方法试了,比如写个简单的“计算折扣价”函数,或者用for循环遍历数组,遇到问题可以回来留言,我帮你看看;如果试成功了,也欢迎告诉我效果——毕竟学技术最开心的,就是“写的代码能跑通”的那一刻,不是吗?


    WMLScript里声明变量必须写var吗?

    不是必须,但非常 写。如果直接写变量名赋值(比如username = “小明”),虽然能运行,但属于“隐式声明”,会把变量变成全局的。万一其他脚本也用了同名变量,很容易冲突。我朋友之前没写var,就遇到过变量名重复导致逻辑错乱的问题,后来加上var就再也没犯过。而且W3Schools的WMLScript教程里也明确说,用var声明是最佳实践。

    把数字加引号会有什么问题?

    会导致数值计算出错。比如你想存原价100,写成var price = “100”(加了引号),然后算8折写price 0.8,结果会变成”2000.8″这种字符串拼接的错误——因为加引号的数字是字符串类型,没法参与正常数值计算。我朋友之前就踩过这个坑,折腾半小时才发现是引号的问题,改成不加引号的var price = 100就对了。

    函数没写return会怎么样?

    调用函数时会拿到undefined。比如你写了个计算积分的函数,里面算base + add但没写return,然后调用alert(calculateScore(100,20)),弹出来的会是undefined——就像做蛋糕没把成品拿出来,别人根本不知道你做了啥。我朋友一开始没写return,结果调试了好久才发现问题,后来加上return就正常输出结果了。

    遍历数组时for循环的i要从0开始吗?

    对,必须从0开始。因为WMLScript里数组的索引是从0开始的,比如数组users=[“小明”,”小红”,”小刚”],users[0]是小明,users[1]是小红。我朋友之前遍历的时候把i从1开始,结果弹出小红、小刚,漏了第一个元素小明。后来改成i=0,才把所有用户都遍历到了。

    if条件后面的括号里能加分号吗?

    不能,加了会语法错误。比如你写if (score >= 200;),编译器会以为条件结束了,后面的大括号就成了多余的,直接提示语法错误。我朋友之前就犯过这个错,盯着代码看了十分钟才发现多了个分号,删掉分号后就正常运行了。

    原文链接:https://www.mayiym.com/49437.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码