对赋值操作的if判断

一直想知道赋值语句直接放在if中它到底是个什么意思?

教科书上都说什么左值,但左值具体是什么一直还没个确定的说法

看看下面这段程序:

 

 int b=0;
004113AE  mov         dword ptr [b],0
 int a=0;
004113B5  mov         dword ptr [a],0
 if(a=1)
004113BC  mov         dword ptr [a],1
004113C3  cmp         dword ptr [a],0
004113C7  je          wmain+42h (4113D2h)
 {
b=1;
004113C9  mov         dword ptr [b],1
  }
 else
004113D0  jmp         wmain+49h (4113D9h)
 {
  b=2;
004113D2  mov         dword ptr [b],2
 }

 

 

注意这一行      004113C3  cmp         dword ptr [a],0

明显这就是那个的关键,它是直接用a的地址里的值来和0做比较,就是把左边的a地址里的值作为if中的判断条件

 

 int a=0;
 int b=1;
 printf("%d--%d/n",a=a+b,a=2);

 

看看这段代码

结果是这样的

3--3

 

这是怎么回事呢  "a=2"  这个就可以用上面说法来解释,它返回的是一个左值,就是返回了a

 

    int a=0;
004113AE  mov         dword ptr [a],0
 int b=1;
004113B5  mov         dword ptr [b],1
 printf("%d--%d/n",a=a+b,a=2);
004113BC  mov         dword ptr [a],2
004113C3  mov         eax,dword ptr [a]
004113C6  add         eax,dword ptr [b]
004113C9  mov         dword ptr [a],eax
004113CC  mov         esi,esp
004113CE  mov         ecx,dword ptr [a]
004113D1  push        ecx 
004113D2  mov         edx,dword ptr [a]
004113D5  push        edx 
004113D6  push        offset string "%s--%s/n" (4156A4h)
004113DB  call        dword ptr [__imp__printf (4182BCh)]
004113E1  add         esp,0Ch
004113E4  cmp         esi,esp
004113E6  call        @ILT+310(__RTC_CheckEsp) (41113Bh)

 

 注意看

004113CE  mov         ecx,dword ptr [a]
004113D1  push        ecx 
004113D2  mov         edx,dword ptr [a]
004113D5  push        edx 

 

就是直接把a的值直接压栈,两个参数是一样的,就是说传递的就是a,

同时这也说明了这样写是很危险的,在计算过程中对a的任何改变,都可能影响到所有参数a;

 

 

  int a=0;
 int b=1;
 printf("%d--%d/n",a=a+b,a);

 

这个和上面的效果基本是相同的。

 

 

综上所诉,if(a=表达式)判断的就是a的值,而不是有些人认为的 就是判断这个赋值操作的成功与否。

 

<think>首先,用户的问题是:“我想查找在泛微中使用if语句判断文本框空值并进行赋值的方法”。我需要基于提供的引用内容来回答这个问题。 回顾引用内容: - 引用[1]:讨论了泛微OA流程引擎中主表字段和明细表字段的值获取问题。 - 引用[2]:提到了PC端重置控件内容的方法,但主要是关于多选题。 - 引用[3]:详细描述了在泛微OA中如何使用JavaScript代码块来实现多选字段的数量统计,并将其赋给文本框字段。这包括监听字段变化、处理空值、分割字符串等。 - 引用[4]:概述了在泛微建模引擎中创建表单和字段的过程,包括设置组件如文本框。 用户的查询焦点是:使用if语句判断文本框是否为空,并进行赋值。这与引用[3]直接相关,因为它涉及JavaScript代码操作字段值。 步骤: 1. **理解用户需求**:用户想在泛微OA表单中,使用JavaScript(JS)代码来判断一个文本框控件是否为空(即空值),然后基于这个判断赋值给另一个字段或进行一些操作。 2. **参考引用[3]**:这是关键引用: - 它描述了JS代码块的功能: - 监控字段值变化(使用`bindField`函数)。 - 处理空值:如果多选字段为空,则显示“0”,避免数据库存储空值。 - 分割统计数量。 - 使用`setFieldValue`将值更新到目标文本框。 - 代码部署:在流程节点的HTML模板中插入JS代码块,替换字段ID。 3. **提取相关部分**: - 判断空值:在JS代码中,检查字段值是否为null或空字符串。 - 使用if语句:这正是JavaScript的标准用法。 - 赋值:使用`setFieldValue`函数来设置另一个字段的值。 4. **构建回答**: - 由于引用[3]提供了具体示例和方法,我应该基于它来回答。 - 描述如何使用if语句在JS代码中判断空值。 - 给出一个简单的代码示例。 - 确保回答结构化:帮助用户逐步解决问题。 5. **系统级指令**: - 使用中文回答。 - 结构清晰。 - 生成相关问题。 - 在引用末尾添加引用标识,如[^3]。 6. **生成相关问题**: - 基于用户查询,相关问题可以包括泛微OA中JS代码的其他应用、常见陷阱等。 回答结构: - 先解释方法。 - 提供代码示例。 - 引用和注意事项。 - 最后,生成相关问题。 代码示例思路: 从引用[3]中提取核心: - 监听字段变化:`bindField('fieldId', function() { ... })` - 判断是否为空:`if (value === null || value === "") { ... }` - 赋值:`setFieldValue('targetFieldId', newValue)` 完整示例: ```javascript // 示例:判断文本框是否为空,并赋值 bindField('textboxFieldId', function() { var value = getFieldValue('textboxFieldId'); if (value === null || value === "" || value.trim() === "") { // 如果为空,设置默认值或赋值给其他字段 setFieldValue('anotherFieldId', 'Default Value'); } else { // 如果不为空,进行其他操作 setFieldValue('anotherFieldId', 'Not Empty'); } }); ``` 字段ID可以通过表单设计器查看,如引用[3]所述。 注意事项: - 确保字段ID正确。 - 处理空值的一致性问题。 - 代码部署在HTML模板中。 最后,生成相关问题。 </think>在泛微OA中,使用JavaScript代码块实现if语句判断文本框空值并进行赋值是一个常见需求,尤其在流程表单中动态控制字段值。以下是基于引用[^3]和[^4]的详细方法,分步骤说明: ### 方法步骤 1. **插入JS代码块** 在泛微流程节点的HTML模板中,通过“插入代码块”功能添加JavaScript代码(引用[^3])。代码需部署在监听字段事件的上下文中。 2. **判断空值并赋值** 使用`if`语句检查文本框的值是否为空(`null`、空字符串或空格),并通过`setFieldValue`函数赋值。以下是示例代码: ```javascript // 监听源文本框字段的变化 bindField('sourceFieldId', function() { // 获取源文本框的值 var value = getFieldValue('sourceFieldId'); // if语句判断空值 if (value === null || value.trim() === "") { // 如果为空,赋值默认值(如"0"或特定文本) setFieldValue('targetFieldId', '0'); // 例如:显示"0"表示空值 } else { // 如果不为空,赋值其他内容(可自定义逻辑) setFieldValue('targetFieldId', '数据已填写'); } }); ``` - **关键函数**: - `getFieldValue('fieldId')`: 获取字段当前值。 - `setFieldValue('fieldId', newValue)`: 为字段赋值新值。 - **空值判断标准**: - `value === null`: 检查是否为`null`。 - `value.trim() === ""`: 检查去除空格后是否为空字符串,避免用户误输入空格(引用[^3]强调处理空值的一致性)。 3. **字段ID替换** - 将代码中的`'sourceFieldId'`替换为需监控的文本框字段ID(如监控是否为空)。 - 将`'targetFieldId'`替换为需赋值的字段ID(目标字段)。 - **ID获取方法**: 在表单设计界面右下角查看字段ID(引用[^3])。 4. **处理数据库兼容性** - 泛微OA中,空值在数据库存储时可能导致异常。建议显式赋值为`'0'`或默认文本(如"未填写"),避免留空(引用[^3])。 ### 注意事项 - **代码部署位置**: 确保代码块插入在流程节点的“HTML模板”中,而非表单设计器(引用[^3])。 - **事件触发**: `bindField`函数监听字段值变化,用户输入或修改文本框时自动触发判断。 - **调试技巧**: 使用`console.log(value)`输出中间值到浏览器控制台,验证空值判断逻辑(引用[^3])。 - **空值处理场景**: - 初始化表单时文本框为空,需显示默认值。 - 用户清空文本框时,自动恢复默认状态(引用[^4]提到默认值配置)。 ### 完整示例 假设需监控文本框(ID: `5839`)是否为空,为空时在目标字段(ID: `7265`)显示"未填写": ```javascript bindField('5839', function() { var input = getFieldValue('5839'); if (input === null || input.trim() === "") { setFieldValue('7265', '未填写'); // 赋值提示文本 } else { setFieldValue('7265', '已填写'); // 非空时赋值 } }); ``` 部署后,当用户在ID为`5839`的文本框中输入内容时,ID为`7265`的字段将动态更新[^3][^4]。 ### 常见问题解决 - **为什么赋值不生效?** 检查字段ID是否正确,或确保代码块在流程节点中启用(引用[^3])。 - **如何处理多字段联动?** 扩展`if`语句,添加嵌套逻辑或多个`bindField`监听。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值